您知道如何仅在表中显示col3不是'X'的相同ID的行吗?
表1:
ID | col1 | col2 |
---+-----+-----+
1 | 0 | 0 |
1 | D | C |
1 | D | C |
2 | 0 | 0 |
2 | D | C |
2 | D | C |
3 | D | C |
3 | D | C |
3 | D | C |
表2:
ID | col1 | col2 | col3
---+------+------+-----
1 | 0 | 0 | X
1 | D | C | null
1 | D | C | null
2 | 0 | 0 | null
2 | D | C | null
2 | D | C | null
例如,在上面的两个表格中,它应显示为结果:
ID | col1 | col2 |
---+------+------+
2 | 0 | 0 |
2 | D | C |
2 | D | C |
3 | D | C |
3 | D | C |
3 | D | C |
ID 2(因为所有col3为空)和ID 3(因为它在表1中,但不在表2中,所以就像它为null,或者它没有任何col3 = X)
它应该适用于所有ID逐行排列的所有ID,并且仅适用于表2中只有表1中不存在或不存在所有行的同一ID。
这是我尝试过的:
select
T.id, T2.col1, T2.col2
from table1 T
inner JOIN table2 T2 on T.ID=T2.ID
where Cond1
and T.ID NOT IN
(SELECT T2.ID FROM table2 T2
WHERE T.ID=T2.ID
AND T2.COL3='X') it displays only half of what i want : ID | col1 | col2 |
---+------+------+
2 | 0 | 0 |
2 | D | C |
2 | D | C |
我也需要同时拥有ID = 2和ID = 3:
3 | D | C |
3 | D | C |
3 | D | C |
谢谢
答案 0 :(得分:2)
我认为您只想要not exists
:
select t1.*
from t1
where not exists (select 1
from t2
where t2.id = t.id and t2.col3 = 'X'
);
答案 1 :(得分:0)
您应该在col3!='X'
的不同选择上使用内部联接select * from table1
inner join (
select distinct id from table2
where col3 !='X'
) t on t.id = table1.id