返回具有两个不同值的结果集

时间:2012-01-02 21:52:42

标签: mysql

我有两列:user_idgift_id。我希望返回结果集user_id = 15906或gift_id = 15906,但不 user_id = gift_id。< / p>

因此,在以下数据中,我应该得到两条记录。

user_id | gift_id
--------------------------
15906 | null
15906 | 15906
12345 | 15906

我想要该集的第一个和最后一个记录,而不是user_idgift_id匹配的记录。

5 个答案:

答案 0 :(得分:2)

Select user_ID, Gift_ID
FROM table
WHERE (user_ID = 15906 or gift_ID=15906) and (user_ID <> gift_ID)

答案 1 :(得分:2)

最自然的契合似乎是xor

select user_id, gift_id 
from table1 
where (coalesce(user_id,0) = 15906) xor (coalesce(gift_id,0) = 15906)

A link, just in case.

答案 2 :(得分:1)

上述SQL语句的问题在于它们没有考虑到SQL语句将int类型与int类型进行比较...大多数sql解析器并不是真的喜欢这个。

尝试xQbert的代码,但使用coalesce函数

Select user_ID, Gift_ID
FROM table
WHERE (user_ID = 15906 or gift_ID=15906) and (user_ID <> coalesce(gift_id,0))

这样就可以将任何NULL转换为0以进行正确的比较。

答案 3 :(得分:0)

也许在where子句中使用group解决问题:

select * FROM tablename where ( user_id = 15906 or gift_id = 15906 ) and gift_id <> user_id 

答案 4 :(得分:0)

SELECT * FROM your_table 
WHERE ( user_id = 15906 or gift_id = 15906 ) and gift_id <> user_id;