2012-01-02 17 views
-1

結果セットを返す私は2つの列があります。私は、結果セットを返すために探しているところuser_id = 15906またはどこgift_id = 15906、しかしuser_id = gift_idない。私は2つのレコードを取得する必要があり、次のデータのうちので2つの異なる値

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

私はそのセットではなく1 user_idgift_id試合の最初と最後のレコードをしたいです。

+0

1行目のヌル値が問題の原因だと思います。 – hcker2000

答えて

1

です上記のSQL文の問題は、SQL文が型intと型を比較していることを考慮していないことです。ほとんどのsqlパーサーはこれを本当に気に入っていません。

これは、それがどのようにNULLが適切comparisionsのために0に変換されるようになりますxQbertのコードが、coalesce機能

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

を使用してみてください。

+0

感謝を返す行3 – hcker2000

0

たぶん原因で問題が解決した場合に、グループ使用:

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

'FROM'節が必要です。 – Lion

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

これはこれはこれは私が問題を持っていた理由の良い答えや説明のための行3 – hcker2000

2

を最も自然なフィット感がxor

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

link, just in case.

+0

を返します。 – hcker2000

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

を返す行3 – hcker2000

関連する問題