我有2张桌子。 Table1将是主表。 表2包含与table1相关的数据。
表1:
WONUM
123
124
125
表2:
wonum task holdstatus
123 1 APPR
123 2 APPR
123 3 APPR
124 1 COMP
124 2 APPR
125 1 COMP
125 2 COMP
我想从table1中选择所有的winum,其中table1.wonum = table2.wonum,并且没有table2.HOLDSTATUS ='COMP'的记录
任何帮助都会很棒。
我得到的壁橱是:
select * from table1 where
exists (select 1 from table2 where table1.wonum=table2.wonum and holdstatus != 'COMP');
答案 0 :(得分:2)
你几乎得到了正确的答案。 试试这个问题:
SELECT t1.wonum
FROM table1 t1
WHERE t1.wonum NOT IN (
SELECT t2.wonum
FROM table2 t2
WHERE t2.wonum = t1.wonum
AND t2.holdstatus = 'COMP'
);
这应该会为您提供所需的所有记录。在这种情况下,只记录123。
您也可以使用NOT EXISTS查询来执行此操作。一般来说,它们表现更好,但是如果你有一张小桌子,那么它就不会产生那么大的差别。
SELECT t1.wonum
FROM table1 t1
WHERE NOT EXISTS (
SELECT t2.wonum
FROM table2 t2
WHERE t2.wonum = t1.wonum
AND t2.holdstatus = 'COMP'
);
答案 1 :(得分:1)
即将结束,您只需使用NOT EXISTS
并撤销holdstatus
条件:
Select *
From table1 t1
Where Not Exists
(
Select *
From table2 t2
Where t1.wonum = t2.wonum
And t2.holdstatus = 'COMP'
);
答案 2 :(得分:0)
你可能需要
中的位置select * from table1
where wonum in (select distinct wonum from table2 holdstatus != 'COMP');
答案 3 :(得分:0)
外部联接的解决方案略有不同:
select t1.wonum
from table1 t1
left outer join table2 t2
on t1.wonum = t2.wonum
and t2.holdstatus = 'COMP'
where t2.wonum is null
答案 4 :(得分:0)
等同于其他示例但不使用“不存在”
SELECT *
FROM table1 t1
WHERE 'COMP' <> ALL (SELECT t2.holdstatus
FROM tables t2
WHERE t2.wonum = t1.wonum);