2017-08-31 85 views
2

我有兩個表格,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

回答

0

我發現這個解決方案我不知道這是否是最好的方法來做到這一點?

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

1

這是基本的內連接例如:

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

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

0

在這裏你去:

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

相關問題