4

给定两个表(每个表中的行不同):

 1)  x | y     z   2)  x | y     z
    -------   ---     -------   ---
     1 | a     a       1 | a     a
     1 | b     b       1 | b     b
     2 | a             1 | c
     2 | b             2 | a
     2 | c             2 | b
                       2 | c

有没有办法选择第一个表的列中的值,该列x中的值子集与第二个表的列中的值完全匹配?yxz

万一1),预期的结果是1。如果c添加到第二个表中,则预期结果为2
在这种情况下2),预期结果是no record因为第一个表中的子集都不匹配第二个表中的子集。如果c添加到第二个表中,则预期结果为1, 2

我尝试使用except并将intersect第一个表的子集与第二个表进行比较,效果很好,但是这部分花费的时间太长intersect,我不知道为什么(第一个表有大约 10.000 条记录,第二个有大约10)。

编辑:我已经更新了问题以提供额外的场景。

4

2 回答 2

7
SELECT
  table1.x
FROM
  table1
INNER JOIN
  table2
    ON table1.y = table2.z
GROUP BY
  table1.x
HAVING
      COUNT(*) = (SELECT COUNT(*) FROM table2 AS lookup)
  AND COUNT(*) = (SELECT COUNT(*) FROM table1 AS lookup WHERE x = table1.x)
于 2012-07-11T13:21:15.313 回答
1

其中之一会做

select
    t1.x
from 
    table1 as t1 inner join table2 as t2 on t1.x=t2.x
group by t1.x
having count(distinct t1.x)=count(distinct t2.x)

select
    t1.x
from 
    table1 as t1 inner join table2 as t2 on t1.x=t2.x
group by t1.x
having count(distinct t1.x)=(select count(distinct x) from table2)
于 2012-07-11T13:19:39.433 回答