如何获取唯一值,不包括2个表中的1个中的值

时间:2017-12-09 18:37:15

标签: sql mariadb

我需要从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

2 个答案:

答案 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。