我一直在尝试编写一个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子句以使其正常工作。
答案 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