首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql查询帮助

sql查询帮助
EN

Stack Overflow用户
提问于 2010-02-16 12:13:17
回答 7查看 85关注 0票数 0

我还需要一个sql查询的帮助。

如果我在一个表中有两列:

代码语言:javascript
复制
tag1 tag2

并且希望选择获得$tag1或$tag2但从未获得$tag1和$tag2的行,我该如何编写sql查询呢?

我已经尝试过了:

代码语言:javascript
复制
    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))

但它似乎不起作用。

希望能帮上忙,谢谢!

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-02-16 12:54:24

我认为这是:

代码语言:javascript
复制
SELECT id FROM tagPairs WHERE tag1 XOR tag2

仅检查其中一个字段是否为非NULL (如果确实如此)。

澄清问题:

您是说值($tag1或$tag2)可以在任何一个字段(tag1或tag2)中吗?除了$tag1、$tag2、NULL之外,这两个字段还能有其他值吗?

如果这两个问题的答案都是肯定的,那么我同意你正在做一个基本的XOR。如果您不知道如何在这里使用XOR,那么逻辑上"a xor b“的等价物是

代码语言:javascript
复制
( a and not b ) or 
( b and not a )

在你的情况下

代码语言:javascript
复制
a = (tag1 in ($tag1,$tag2))
b = (tag2 in ($tag1,$tag2))

not a = (tag1 not in ($tag1,$tag2))
not b = (tag2 not in ($tag1,$tag2))

因此,只需替换,您就会得到:

代码语言:javascript
复制
(  (tag1 in ($tag1,$tag2)) and (tag2 not in ($tag1,$tag2))  ) or 
(  (tag2 in ($tag1,$tag2)) and (tag1 not in ($tag1,$tag2))  )
票数 2
EN

Stack Overflow用户

发布于 2010-02-16 12:14:09

尝试使用XOR

票数 0
EN

Stack Overflow用户

发布于 2010-02-16 12:21:41

我认为您的基本逻辑是好的,但是您需要更多的括号来将您的前两个IN子句组合在一起。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2270578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档