【问题标题】:SQL SELECT from multiple tables or JOINSQL SELECT 从多个表或 JOIN
【发布时间】:2015-02-21 07:27:57
【问题描述】:

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

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

现在我只想列出我在table1 中有多少不同的IDs 以及存储在table2 中的一些其他信息。

我怎样才能得到我最终显示的期望输出?

为了说明我的想法,我以“信使”数据库为例。

表格

T1


Id_thread            Date
1                    13Dic
2                    12Dic

T2


Id_thread            Message        Name
1                    Hi             Someone
1                    Hi to you      Someone
2                    Help me?       Someother
2                    Yes!           Someother

期望的输出


T1.Id_thread         T2.Name     T1.Date
1                    Someone     13Dic
2                    Someother   12Dic

【问题讨论】:

  • 表2的限制条件是什么?最多一排?还是其他条件?

标签: mysql sql select join syntax


【解决方案1】:
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

【讨论】:

  • 我认为这将为每个 ID 提供多个结果。
  • 不,不会因为查询@AK47中的group by子句
  • 哦!正确的。我仍然认为这会产生错误,没有用于 group by 中的列的聚合函数。
  • 不是它不会在mysql中给你这样的错误。但如果是 sql 我怀疑
  • 那么重复记录需要哪些记录?
【解决方案2】:

我会加入并使用distinct

SELECT DISTINCT t1.id_thread, t2.name, t1.date
FROM   t1
JOIN   t2 ON t1.id_thred = t2.id_thread

【讨论】:

  • 我会像这样试一试。
【解决方案3】:

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

【讨论】:

  • 是的,我注意到了。但是制作原始应用程序的人是这样做的,不知道为什么。
  • 我试试这个看看会发生什么。
【解决方案4】:

试试这个:

SELECT DISTINCT T1.Id_thread, T2.Name, T1.Date 
FROM T1 
LEFT OUTER JOIN T2 ON T1.Id_thread = T2.Id_thread

【讨论】:

    【解决方案5】:

    您尚未指定如何限制表 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 语句中指定其他条件。

    【讨论】:

      猜你喜欢
      • 2021-03-27
      • 1970-01-01
      • 2011-03-03
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 2018-03-07
      相关资源
      最近更新 更多