2013-07-12 26 views
0

我有一個查詢,看起來像:SQL:你怎樣加入才能給你INVERSE行?

SELECT b.user_name FROM 
(SELECT user_name FROM my_table_name 
WHERE date='2013-07-11') a 
JOIN 
(SELECT user_name FROM my_table_name 
WHERE date='2013-06-11') b 
ON 
a.user_name != b.user_name 

如何做一個JOIN,讓我在六月的名字,但不是在七月?

回答

2

這被稱爲反連接。如果您的RDBMS支持,則可以使用SQL標準EXCEPT運算符。

SELECT user_name 
FROM my_table_name 
WHERE date = '2013-06-11' 
EXCEPT 
SELECT user_name 
FROM my_table_name 
WHERE date = '2013-07-11' 

其他可能性包括NOT INNOT EXISTSLEFT OUTER JOIN ... NULL或者你也可以如下使用GROUP BY

SELECT user_name 
FROM my_table_name 
WHERE date IN ('2013-06-11', '2013-07-11') 
GROUP BY user_name 
HAVING MAX(date) = '2013-06-11' 
+0

如果它的日期> = '2013年7月11日' 和日期> = '2012-01-01' 和日期<= '2012-12-31' – user1899415

+0

的'EXCEPT'部分保持不變但個別的WHERE條款進行了調整,所以最高的一個包括整個六月和整個七月的底部。 'GROUP BY'可以將其WHERE子句調整爲包括整個兩個月,並且將'HAVING'更改爲'HAVING MAX(date)''2013-07-01'' –