2015-08-19 39 views
0

見下表:如何檢查是否有相同的外鍵記錄具有一定的價值

id foreign_key_id event_type event_status 
--------------------------------------- 
1  1   20   1 
2  1   20   2 
3  1   30   1 
4  1   30   2 
5  2   20   1 
6  2   20   2 
7  2   30   1 

基本上,我想查詢要返回的有紀錄事件類型20狀態1,但只有外鍵沒有與事件類型30和狀態2

在這種情況下記錄它應該返回FK 2.

回答

3

您可以使用相關子查詢。

SELECT DISTINCT foreign_key_id 
FROM yourTable AS t1 
WHERE t1.event_type = 20 and t1.event_status = 1 
AND foreign_key_id NOT IN (
    SELECT foreign_key_id 
    FROM yourTable AS t2 
    WHERE t1.foreign_key_id = t2.foreign_key_id 
    AND t2.event_type = 30 AND t2.event_status = 2) 

DEMO

它也可以用一個LEFT JOIN來完成:

SELECT DISTINCT t1.foreign_key_id 
FROM yourTable AS t1 
LEFT JOIN yourTable AS t2 
ON t1.foreign_key_id = t2.foreign_key_id 
    AND t2.event_type = 30 AND t2.event_status = 2 
WHERE t1.event_type = 20 and t1.event_status = 1 
AND t2.id IS NULL 

DEMO

0
select distinct foreign_key_id 
from tablename 
where event_type = 20 
and event_status = 1 
and foreign_key_id not in (
    select distinct foreign_key_id 
    from tablename 
    where event_type = 30 
    and event_status = 2 
); 

希望它能幫助。

相關問題