没有匹配的SQL内连接(相同的表)

时间:2013-08-27 21:24:23

标签: sql self-join

我一直在尝试编写一个SQL查询来返回表中没有匹配值的所有行。

我有公司,工作,子工作,成本代码和成本类型(以及其他领域)。我需要返回所有具有“J”costtype但没有“L”costtype的行。

使用数据可能更好地解释了这一点:

Company  Job      Subjob  Costcode  Costtype
-------  -------- ------- --------- ----------
    1     1234             0132      J
    1     2345     01      9394      E
    1     2345     02      9233      L
    1     2345     02      9992      J
    1     2345     02      9992      L
    1     2345     03      1112      J
    1     3384             3928      J
    1     3384     03      3928      J
    1     3384     11      2838      L

所以我希望如下:

Company  Job      Subjob  Costcode  Costtype
-------  -------- ------- --------- ----------
    1     1234             0132      J
    1     2345     03      1112      J
    1     3384             3928      J
    1     3384     03      3928      J

我知道这很简单,我很遗憾,但无法正确组合JOIN,ON和WHERE子句以使其正常工作。

3 个答案:

答案 0 :(得分:2)

无需使用JOIN s:

SELECT *
FROM YourTable A
WHERE EXISTS(SELECT 1 FROM YourTable
             WHERE Company = A.Company
             AND Job = A.Job
             AND Costtype = 'J')
AND NOT EXISTS(SELECT 1 FROM YourTable
               WHERE Company = A.Company
               AND Job = A.Job
               AND Costtype = 'L')

答案 1 :(得分:0)

选择公司,工作,子工作,成本代码           从表              公司= A.Company              AND Job = A.Job              AND Costtype ='J' 减去  SELECT公司,工作,子工作,成本代码,           从表              公司= A.Company              AND Job = A.Job              AND Costtype ='L'

我希望这满足,除非您想在结果集中显示费用类型。

答案 2 :(得分:0)

 SELECT * FROM COMPO T1
 WHERE Costtype='J'
 AND NOT EXISTS
(SELECT *  FROM COMPO T2 WHERE T1.Costcode=T2.Costcode AND Costtype ='L')

Company             Job     Subjob           Costcode          Costtype
1                   1,234       ?               0,132           J
1                   2,345       3               1,112           J
1                   3,384       ?               3,928           J
1                   3,384       3               3,928           J