你最好的,像這樣的問題的辦法是把它們分解成單獨的SQL,所以在這個表去兩次。一旦爲DE
,並再次爲PE
:
SELECT name FROM table WHERE status = 'DE' and start_date = '2016-12-01' AND end_date = '2016-12-28';
SELECT name FROM table WHERE status = 'PE' and start_date = '2017-02-01' AND end_date = '2017-02-28';
現在你已經有了結果集,你可以測試針對對方:
SELECT name
FROM
(SELECT name FROM table WHERE status = 'DE' and start_date = '2016-12-01' AND end_date = '2016-12-28') t1
INNER JOIN (SELECT name FROM table WHERE status = 'DE' and start_date = '2016-12-01' AND end_date = '2016-12-28') t2 ON t1.name = t2.name;
既然你實際上並沒有從選擇第二個派生表,您可以使用相關的子查詢,並使用相同的邏輯:
SELECT name
FROM table t1
WHERE
status = 'DE' and
start_date = '2016-12-01' AND
end_date = '2016-12-28' AND
name IN (SELECT name FROM table t2 WHERE t1.name = t2.name status = 'PE' and start_date = '2017-02-01' AND end_date = '2017-02-28');
這可能會表現更好。