我有两个表,我需要在同一个SELECT
输出中获取数据。问题是我需要限制结果的数量。
假设我的ID
列在table1
中是唯一的,但在table2
中,它有许多行ID
。
现在,我只想列出ID
中有多少table1
个table2
以及
Id_thread Date
1 13Dic
2 12Dic
中存储的其他一些信息。
如何获得我最终显示的所需输出?
为了清楚我的想法,我使用了一个“信使”数据库作为例子。
表
T1
Id_thread Message Name
1 Hi Someone
1 Hi to you Someone
2 Help me? Someother
2 Yes! Someother
T2
T1.Id_thread T2.Name T1.Date
1 Someone 13Dic
2 Someother 12Dic
期望的输出
{{1}}
答案 0 :(得分:3)
我加入并使用distinct
:
SELECT DISTINCT t1.id_thread, t2.name, t1.date
FROM t1
JOIN t2 ON t1.id_thred = t2.id_thread
答案 1 :(得分:2)
使用JOIN
和GROUP BY
:
SELECT t1.Id_thread, t2.Name, t1.Date
FROM t1
JOIN t2 ON t1.Id_thread = t2.Id_thread
GROUP BY t1.Id_thread
请注意,如果Name
中t2
的所有行的Id_thread
相同t1
,则该列可能应位于JOIN
。如果您解决了这个问题,则不需要{{1}}。
答案 2 :(得分:1)
试试这个:
SELECT DISTINCT T1.Id_thread, T2.Name, T1.Date
FROM T1
LEFT OUTER JOIN T2 ON T1.Id_thread = T2.Id_thread
答案 3 :(得分:0)
select T1.Id_thread,T2.Name,T1.Date from T1
inner join T2 on T1.Id_thread = T2.Id_thread
group by T1.Id_thread
order by T1.Id_thread
答案 4 :(得分:0)
您尚未指定表2中结果的限制。考虑到您只想要一行,您可以使用CROSS APPLY:
Select T1.Id_thread,T2Table.Name,T1.Date From T1
Cross Apply (Select Top 1 T2.Name From T2 Where T2.Id_thread=T1.Id_thread) T2Table
如果愿意,您可以在内部Select语句中指定其他条件。