帮助sql查询

时间:2010-02-16 04:13:17

标签: mysql

我需要另外一个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))

但似乎没有效果。

非常感谢这里的一些帮助,谢谢!

7 个答案:

答案 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个查询&然后'联合所有'输出。

  1. 寻找tag1 = $ tag1& tag1<> $ TAG2

  2. 寻找tag2 = $ tag2& tag2<> $ TAG1

  3. 这只是逻辑表示,我之前从未使用过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)))