我需要从2个表中获取唯一值,但是从第二个表中排除值。我的意思是,我需要第一个表中第二个表中不的所有值,并且大于9. 表格如下所示:
Table Gr: Table Ak: Idgr | TextGr Idak | Grid | TextAk 1 | Aa 1 | 11 | R 11 | Bb 2 | 14 | P 12 | Cc 3 | 16 | P 13 | Dd 4 | 13 | P 14 | Ee 15 | Ff 16 | Gg 17 | Hh 18 | Ii表格中的
Grid
与表格Gr上Idgr
的ID相同。
我需要得到如下结果:
Results: Idgr | TextGr 12 | Cc 15 | Ff 17 | Hh 18 | Ii
我尝试使用LEFT OUTER JOIN,但我得到了表格Gr的几乎所有值。查看SQLfiddle demo
答案 0 :(得分:1)
您希望在on
中测试相等性,然后使用where
来获取不匹配的内容。所以,我想你想要:
select Idgr, TextGr
from Gr left outer join
Ak
on gr.idgr = ak.gid
where gr.idgr > 9 and ak.Idak is null;
Here是SQL小提琴。
答案 1 :(得分:0)
您正在寻找关键字EXCEPT。
(SELECT Idgr AS Idgr FROM Gr WHERE Idgr > 9)
EXCEPT
(SELECT Grid AS Idgr FROM Ak);
这将提供Gr的所有值的列表,然后从Ak中减去匹配的值。在Mariadb中,它在其他SQL变体中被称为EXCEPT,它通常被称为MINUS。