从表中获取记录到另一个表中的所有详细信息类型的记录

时间:2017-08-31 09:29:23

标签: sql tsql

我有两个表,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

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

4 个答案:

答案 0 :(得分:1)

这是基本的内连接示例:

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

答案 1 :(得分:0)

两个表之间的INNER JOIN将获得两个表中存在的结果,因此:

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

从表中得到的所有记录都是Table1中的ID在表2中

有一篇精彩的帖子HERE,它解释了不同类型的连接

答案 2 :(得分: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

答案 3 :(得分: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