我还需要一个sql查询的帮助。
如果我在一个表中有两列:
tag1 tag2并且希望选择获得$tag1或$tag2但从未获得$tag1和$tag2的行,我该如何编写sql查询呢?
我已经尝试过了:
SELECT id
FROM tagPairs
WHERE (tag1 IN ($tag1, $tag2))
OR (tag2 IN ($tag1, $tag2))
AND ((tag1 != $tag1 OR tag1Id != $tag2) AND (tag2 != $tag1 OR tag2 != $tag2))但它似乎不起作用。
希望能帮上忙,谢谢!
发布于 2010-02-16 12:54:24
我认为这是:
SELECT id FROM tagPairs WHERE tag1 XOR tag2仅检查其中一个字段是否为非NULL (如果确实如此)。
澄清问题:
您是说值($tag1或$tag2)可以在任何一个字段(tag1或tag2)中吗?除了$tag1、$tag2、NULL之外,这两个字段还能有其他值吗?
如果这两个问题的答案都是肯定的,那么我同意你正在做一个基本的XOR。如果您不知道如何在这里使用XOR,那么逻辑上"a xor b“的等价物是
( a and not b ) or
( b and not a )在你的情况下
a = (tag1 in ($tag1,$tag2))
b = (tag2 in ($tag1,$tag2))
not a = (tag1 not in ($tag1,$tag2))
not b = (tag2 not in ($tag1,$tag2))因此,只需替换,您就会得到:
( (tag1 in ($tag1,$tag2)) and (tag2 not in ($tag1,$tag2)) ) or
( (tag2 in ($tag1,$tag2)) and (tag1 not in ($tag1,$tag2)) )发布于 2010-02-16 12:14:09
尝试使用XOR。
发布于 2010-02-16 12:21:41
我认为您的基本逻辑是好的,但是您需要更多的括号来将您的前两个IN子句组合在一起。
https://stackoverflow.com/questions/2270578
复制相似问题