我希望你很好。
我尝试用两个表之间的连接编写一个sql查询,如下所示:
table1(id_master,id)
1,1
1,2
1,3
1,4
1,5-
第二个表
table2(id_master,id)
1,1
1,2
1,3
1,4-
如您所见,每张表都包含ID_master& ID。 table2包含table1的acknownledgement(ack)。 table1中的每一行必须在table2中有一个“ack”。
在我的例子中,我没有结果,因为(table1(1,5)在table2中没有得到一个ack,当table1.row(1,5)在table2中得到一个ack时我想要结果。
我尝试过加入,但是当我们有第一个“确认”时我有结果。当我拥有所有“ack”时,我想得到结果。
我希望能够清楚。
感谢您的帮助。
亲切的问候
编辑:
谢谢stripathi& JPW,
例1:
table1(id_master,id)
1,A
1,B
1,C
2,d
2,E
第二个表
table2(id_master,id)
1,A
1,B
2,d
2,E
我的查询结果必须是:
2,d
2,E
因为我们可以找到行(2,D)和& (2,E)在两个表中,但不是(1,*)的情况(它错过了表2中的(1,C))。
答案 0 :(得分:0)
我认为这两个查询都应该按照您的意愿执行,并且它们似乎可以使用Oracle 11g R2(请参阅此SQL Fiddle)。请注意,如果第二个表包含第一个表中不存在的项,结果可能是错误的。
select *
from table1
where id_master in (
select a.id_master
from table1 a
group by a.id_master
having count(distinct a.id) = (
select count(distinct b.id)
from table2 b
where a.id_master = b.id_master
group by b.id_master
)
);
select *
from table1 a
where not exists (
select id from Table1 where id_master = a.id_master
minus
select id from Table2
);
答案 1 :(得分:0)
如果您使用oracle,则可以使用ROWNUM
获取first ack
的行号。你可以试试这个:
SELECT ID,ID_MASTER FROM(
SELECT ID,ID_MASTER,ROWNUM RR
FROM TABLE2
ORDER BY ID_MASTER,ID ASC) T2
WHERE RR >= (
SELECT R FROM(
SELECT ID_MASTER,ID, ROWNUM R
FROM TABLE1
ORDER BY ID_MASTER,ID ASC
) T1
WHERE T1.ID_MASTER||T1.ID NOT IN(SELECT ID_MASTER||ID FROM TABLE2)
)