我有两列:user_id
和gift_id
。我希望返回结果集user_id
= 15906或gift_id
= 15906,但不 user_id
= gift_id
。< / p>
因此,在以下数据中,我应该得到两条记录。
user_id | gift_id
--------------------------
15906 | null
15906 | 15906
12345 | 15906
我想要该集的第一个和最后一个记录,而不是user_id
和gift_id
匹配的记录。
答案 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)
答案 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;