从其他表格中获取所有细节类型的记录

从其他表格中获取所有细节类型的记录

问题描述:

我有两个表格,Table1包含主记录,Table2包含详细信息。 我怎样才能获得的所有记录在Table1击中所有细节Table2从其他表格中获取所有细节类型的记录

CREATE Table1 ([ID] INT , [Title] VARCHAR(256)) 
CREATE Table2 ([ID] INT, [Table1_ID] INT, [Detail] INT) 

样品:

Table1: 
ID Title 
--------------- 
1 Data_1 
2 Data_2 
3 Data_3 


Table2 
ID Table1_ID  Detail 
------------------------------- 
1  1    500 
2  1    600 
3  2    500 
4  3    500 
5  3    600 

我需要这样的结果:

Result: 
Table1_ID Table1_Title 
---------------------- 
1    Data_1 
3    Data_3 

我正在寻找一个最佳性能的方式。

+1

添加一些示例表数据和预期结果。 (作为格式文本。) – jarlh

+0

请检查我的答案,并将其标记为解决方案,如果它为你工作。 – Lamar

+0

https://technet.microsoft.com/zh-cn/library/ms190014(v=sql.105).aspx – Sami

我发现这个解决方案我不知道这是否是最好的方法来做到这一点?

DECLARE @T1 TABLE ([ID] INT, [Title] VARCHAR(256)); 
DECLARE @T2 TABLE ([ID] INT, [Table1_ID] INT, [Detail] INT); 

INSERT INTO @T1 
VALUES 
       (1, 'Data_1'), 
       (2, 'Data_2'), 
       (3, 'Data_3'); 

INSERT INTO @T2 
VALUES 
       (1, 1, 500), 
       (2, 1, 600), 
       (3, 2, 500), 
       (4, 3, 500), 
       (5, 3, 600); 


DECLARE @DetailCount INT 
SELECT @DetailCount = COUNT(DISTINCT [Detail]) FROM @T2 

SELECT 
     T1.[ID] [Table1_ID], 
     T1.[Title] [Table1_Title] 
FROM 
     @T1 T1 INNER JOIN 
     @T2 T2 ON T1.[ID] = T2.[Table1_ID] 
GROUP BY 
     T1.[ID], 
     T1.[Title] 
HAVING 
     COUNT(T2.[Detail]) = @DetailCount 
+0

如果你有'(4,'Data_4')''怎么办?并且我认为你在你的Q中说过 - 我如何获得Table1中的所有记录,这些记录打击了Table2_中的所有细节,否? – Sami

+0

500和600是我的细节和(4,'Data_4')没有打我的示例中的任何细节! – Fred

+0

对我而言,你的解决方案是错误的 – Sami

这是基本的内连接例如:

select Table1.ID, Title 
from Table1 
inner join Table2 on Table1.ID = Table2.Table1_ID 

INNER JOIN两个表将让你存在两个表中的结果,所以之间:

SELECT 
    T1.ID, T1.Title 
FROM Table1 T1 
INNER JOIN Table2 T2 ON T1.ID = T2.Table1_ID 

会让你的所有记录从表中得到的表1中的ID在表2中

有一个辉煌的帖子HERE它解释了不同类型的联接

+0

您的意思是[this](https://stackoverflow.com/a/406333/6426692)post – Sami

+0

这就是@Sami – dbajtr

在这里你去:

DECLARE @T1 TABLE (ID INT, Title VARCHAR(256)); 
DECLARE @T2 TABLE (ID INT, Table1_ID INT, Detail INT); 

INSERT INTO @T1 VALUES 
(1,'Data_1'), 
(2,'Data_2'), 
(3,'Data_3'); 

INSERT INTO @T2 VALUES 
(1,1,500), 
(2,1,600), 
(3,2,500), 
(4,3,500), 
(6,3,600); 

SELECT T1.ID Table1_ID, T1.Title Table1_Title 
FROM @T1 T1 INNER JOIN @T2 T2 ON T1.ID = T2.ID 
WHERE T1.ID IN (1,3); 

输出:

+-----------+--------------+ 
| Table1_ID | Table1_Title | 
+-----------+--------------+ 
|   1 | Data_1  | 
|   3 | Data_3  | 
+-----------+--------------+ 

Demo

+0

Date_2是一个拼写错误。所以你的答案不起作用 – Fred

+0

@Fred所以请纠正它,并且你的问题也有问题 – Sami

+0

更改已应用 – Fred