我有两个表,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
我正在寻找一种性能最佳的方式。
答案 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 |
+-----------+--------------+
答案 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