2014-10-27 57 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

相关问题