2014-10-27 16 views
0

我有2個表。一個看起來是這樣的(它包含多個字段,但不應該的問題):獲取不在另一個特定表中的所有mysql條目

TABLE 'containers'; 
INT id; 
VARCHAR(20) name; 
VARCHAR(20) uid; 

TABLE 'sync'; 
INT id; 
VARCHAR(20) containerUid; 
VARCHAR(20) deviceUid; 

現在我需要把所有的容器,沒有在「sync'表爲一個特定deviceUid的條目。我以這種方式嘗試過,但結果似乎不正確。

SELECT * FROM (SELECT a.*, (SELECT COUNT(*) FROM sync AS b WHERE a.uid = b.containerUid AND b.deviceUid = 'DEVICEUID') AS anzahlSync FROM containers AS a) AS A WHERE anzahlSync = 0 

我想在mysql中這樣做,因爲containers-table包含很多條目。所以我儘量不要讓它們返回結果,但過濾它們。

回答

0

使用not exists

select * 
from containers c 
where not exists (select 1 from sync s where s.containerUid = c.id and s.deviceUid = 'DEVICEUID') 
+0

這就是我一直在尋找的。非常感謝你。 – Sven 2014-11-11 13:02:40

0

當你想還涵蓋的是,在這兩個表中的一個NULL項,你可以使用此查詢:

SELECT * 
FROM 
    (
     SELECT * 
     FROM containers 
     WHERE name LIKE 'DEVICEUID' 
    UNION ALL 
     SELECT id, containerUid as name, deviceUid as uid 
     FROM sync 
     WHERE name LIKE 'DEVICEUID' 
    ) AS diff 
GROUP BY name, uid 
HAVING COUNT(*) = 1 
+0

非常感謝您的幫助。 – Sven 2014-11-11 13:02:20

相關問題