来自多个表或JOIN的SQL SELECT

时间:2014-12-23 07:00:26

标签: mysql sql select join syntax

我有两个表,我需要在同一个SELECT输出中获取数据。问题是我需要限制结果的数量。

假设我的ID列在table1中是唯一的,但在table2中,它有许多行ID

现在,我只想列出ID中有多少table1table2以及 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}}

5 个答案:

答案 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)

使用JOINGROUP 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

请注意,如果Namet2的所有行的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语句中指定其他条件。