2012-03-21 73 views
0

我有一些麻烦,我的查询:我可以在一个查询中使用不同和“in”吗?

SELECT 
    * 
FROM 
    att 
WHERE 
    uid = "f6c507fe-8928-4780-8b54-819611435755" 
AND 
    item_position <> '99' 
AND 
    category IN('CAT1','CAT2'); 

的结果却是一无所获。当我删除“item_position <>'99'AND”时,显示一些项目。我认为问题在于UNLIKE与IN ...有一些行分类为“CAT1”和item_position“99”。这些行不应该显示。

问候!

+1

当您删除item_position检查时,您可以显示一些输出吗?这听起来像你所有的CAT1和CAT2数据都有item_position = 99,但我肯定不能这样,否则你不会问。也许看到一些数据会有所帮助。 – davidethell 2012-03-21 10:14:05

回答

3

尝试:

SELECT 
    * 
FROM 
    att 
WHERE 
    uid = "f6c507fe-8928-4780-8b54-819611435755" 
AND 
    (item_position <> '99' OR item_position IS NULL) 
AND 
    category IN('CAT1','CAT2'); 

你提到的一些行是NULL。我记得,令人讨厌的NULL值和<>倾向于在逻辑中恨对方。

+1

您也可以使用'NOT item_position <=>'99''。飞船运营商'<=>'执行NULL安全比较。 – Hammerite 2012-03-21 10:31:17

0

他修好了他自己的意见,但是这是他最终什么样的主意:

SELECT 
    * 
FROM 
    att 
WHERE 
    uid = "f6c507fe-8928-4780-8b54-819611435755" 
AND 
    (item_position <> '99' OR item_position is NULL) 
AND 
    category IN ('CAT1','CAT2'); 
+0

谢谢,但它不起作用。当我删除“AND item_position <>'99'”时,显示的行... “item_position”在许多行中为NULL。这是问题吗? “item_position <>'99'”无法显示带有“item_position”的行NULL – poldixd 2012-03-21 10:19:43

+0

这相当于askers原始查询。 – Jim 2012-03-21 10:20:46

+0

好吧,这很简单... item_position <> '99' 没有显示出与item_position NULL东西 选择 * FROM ATT WHERE UID =“f6c507fe-8928-4780-8b54-819611435755 “ AND (item_position <>'99'或item_position IS NULL) AND category IN('CAT1','CAT2'); 感谢您的帮助! – poldixd 2012-03-21 10:22:21

相关问题