我需要另外一个sql查询的帮助。
如果我在表格中有2列:
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))
但似乎没有效果。
非常感谢这里的一些帮助,谢谢!
答案 0 :(得分:2)
我认为:
SELECT id FROM tagPairs WHERE tag1 XOR tag2
只检查其中一个字段是否为NULL,如果它甚至这样做。
澄清问题:
您是说任何一个值($ tag1或$ tag2)都可以在任一字段(tag1或tag2)中? 除了$ tag1,$ tag2,NULL?
之外,其中一个字段是否还有其他值?如果两个问题的答案都是肯定的,那么我同意您正在进行基本的异或。如果你不知道如何在这里使用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)) )
答案 1 :(得分:0)
尝试使用XOR
。
答案 2 :(得分:0)
我认为你的基本逻辑是好的,但你需要更多的括号来将前两个IN子句组合在一起。
答案 3 :(得分:0)
尝试编写2个查询&然后'联合所有'输出。
寻找tag1 = $ tag1& tag1<> $ TAG2
寻找tag2 = $ tag2& tag2<> $ TAG1
这只是逻辑表示,我之前从未使用过MySQL。
答案 4 :(得分:0)
尝试:
SELECT id FROM tagPairs WHERE (tag1 = '$tag1') XOR (tag2 = '$tag2')
答案 5 :(得分:0)
WHERE tag1 IN ($tag1, $tag2)
OR tag2 IN ($tag1, $tag2)
AND NOT (tag1 IN ($tag1, $tag2) AND tag2 IN ($tag1, $tag2))
这是纯粹的推测,我从未使用过MySQL。有运营商吗?我希望有。
答案 6 :(得分:0)
小心无效。
WHERE (tag1 IN ($tag1, $tag2)
OR tag2 IN ($tag1, $tag2))
AND (tag1 IS NULL
OR tag2 IS NULL
OR NOT(tag1 IN ($tag1, $tag2) AND tag2 IN ($tag1, $tag2)))