连接两个表,行数

Join between two tables, number of row

希望你一切都好。

我尝试编写一个 sql 查询,其中包含两个 table 之间的连接,如下所示:

table1 (id_master, id)

1,1
1,2
1,3
1,4
1,5

第二个table

table2 (id_master, id)

1,1
1,2
1,3
1,4

如您所见,每个 table 包含 ID_master & id。 table2 包含 table1 的确认 (ack)。 table1 中的每一行必须在 table2 中有一个 "ack"。

在我的示例中,我没有结果,因为 (table1 (1,5) 在 table2 中没有得到确认,而我想要 table1.row 时的结果 ( 1,5) 在 table2.

中有一个 ack

我试过加入,但是当我们有第一个 "ack" 时我得到了结果。当我拥有所有 "ack".

时,我想要结果

希望能说清楚

感谢您的帮助。

亲切的问候

编辑:

感谢 stripathi 和 jpw,

示例 1:

table1 (id_master, id)
1,A
1,B
1,C
2,D
2,E

第二个table

table2 (id_master, id)
1,A
1,B
2,D
2,E

我的查询结果必须是:

2,D
2,E

因为我们可以在两个 table 中找到行 (2,D) & (2,E),但 (1,*) 不是这样(它错过了 ( 1,C) 在table2).

我认为这两个查询都应该满足您的要求,而且它们似乎可以使用 Oracle 11g R2(参见 SQL Fiddle)。请注意,如果第二个 table 包含第一个 table.

中不存在的项目,则结果可能是错误的
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
); 

如果您使用 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)
)