繁体   English   中英

SQL Server:联接两个表,其中左表包含其每个标识符中的右表的所有行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM