[英]SQL Server: join two tables where left table contains all rows of right table in each of its identifier
我正在尝试匹配两个表,其中左表必然在其每个块中包含右表的所有行!
好吧,我只是没有例子就无法更好地描述它:
左表包含多个行块,其中每个块包含7行,列标题在每个块中具有不同的值,每个块由一个数字标识,就像下表所示:
表格1:
objectID propertyID title
------------------------------------
0 17020 Iphone
0 17021 7 plus
0 17022 retina
0 17023 2 GB
0 17024 1960 mh
0 17025 64 GB
0 17026 gold
1 17020 Iphone
1 17021 7 plus
1 17022 retina
1 17023 2 GB
1 17024 1960 mh
1 17025 64 GB
1 17026 white
2 17020 Iphone
2 17021 7 plus
2 17022 retina
2 17023 2 GB
2 17024 1960 mh
2 17025 128 GB
2 17026 white
3 17020 Iphone
3 17021 7
3 17022 retina
3 17023 3 GB
3 17024 1960 mh
3 17025 128 GB
3 17026 red
第二个表总共有3行。
表2:
id title propertyID
-----------------------------
1001 7 plus 17021
1002 2 GB 17023
1003 64 GB 17025
现在我想在table1的每个块中匹配table2的标题? 再次,难以解释!
所需结果 :
objectID propertyID title
----------------------------------
0 17021 7 plus
0 17023 2 GB
0 17025 64 GB
1 17021 7 plus
1 17023 2 GB
1 17025 64 GB
注意,只有table1的前两个块包含table2中找到的所有三个标题。 我希望查询将table2的三行与table1的每个块进行比较,而不仅仅是逐行比较。
因此,如果我想知道涉及哪些“ objectID”,答案将是
objectID
--------
0
1
问题出在我实际上使用以下查询将这两个表联接在一起的地方:
select t1.objectID, t1.propertyID, t1.title
from table1 t1
inner join table2 t2 on t2.title = t1.title
当前结果 :
objectID propertyID title
----------------------------------
0 17021 7 plus
0 17023 2 GB
0 17025 64 GB
1 17021 7 plus
1 17023 2 GB
1 17025 64 GB
2 17021 7 plus
2 17023 2 GB
该查询在这里找到table1的块编号2,其中包含table2的2个标题!
但是它必须在每个块中找到table2的所有三行。
我什至必须加入两个表吗? 如何获得理想的结果?
您可以通过分组并具有子句来实现
select t1.objectID, t1.propertyID, t1.title
from table1 t1
inner join table2 t2 on t2.title = t1.title
group by t1.objectID, t1.propertyID, t1.title
having count(*) = (Select count(*) FROM table2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.