【问题标题】:Sql query to get result from 3 tablesSql查询从3个表中获取结果
【发布时间】:2012-12-31 14:12:28
【问题描述】:

我有以下表格结构。需要从添加日期最近添加的所有表格中选择记录。

我正在尝试从table1, table2, table3 获取titlename, sourcename, description, addde_date,这些是added_date 最近添加的。

标题名和来源名存储在标题和来源表中。

我在这些表上尝试过联合,但 Table3 内容不同的列。

table1

    id   titleid   sourceid     text_content        added_date   -------
    1      15         20         XYzgff       10-10-2012:5:30pm
    2      10         5         gghghggg      10-11-2012:5:30pm

table2

    id   titleid   sourceid    description     added_date   -------
    1       6         8         fhjjjjjkk     11-04-2012:5:30pm 
    2      10         5         gghghggg      10-11-2012:5:30pm

table3

    id       url         Title     Description       added_date       -------------
    1       ggggg        fhhh        llllll         31-04-2012:5:30pm
    2       kkkkkk       ttttt       kkkkkk         10-11-2012:5:30pm  

标题表:

    titleid      title_name
      5            lgsfsgsf
      6            lkklgyy
      10           tyyiugj
      15          lklklklkl

来源表:

    sourceid      source_name
       5            jlkjljlj
       8            ghhhhhhh
       20           hhhhhhhf
       6            llllllll

【问题讨论】:

  • 这个MSSQL、Oracle、Mysql是哪个SQL风格……(也是哪个版本)

标签: sql


【解决方案1】:

您应该使用UNION。试试这个(未经测试):

SELECT t.title_name, s.source_name, t1.text_content, t1.added_date   
FROM Table1 t1
JOIN Title T 
   ON t1.TitleId = T.TitleId
JOIN Source S 
   ON t1.SourceId = S.SourceId
UNION
SELECT t.title_name, s.source_name, t2.description, t2.added_date   
FROM Table2 t2
JOIN Title T 
   ON t2.TitleId = T.TitleId
JOIN Source S 
   ON t2.SourceId = S.SourceId
UNION
SELECT t.title_name, s.source_name, t3.description, t3.added_date   
FROM Table3 t3
JOIN Title T 
   ON t3.TitleId = T.TitleId
JOIN Source S 
   ON t3.SourceId = S.SourceId

我刚刚意识到您的 Table3 中没有 SourceId 或 TitleId。无法获得该信息,但您仍然可以:

SELECT DISTINCT Title_Name, Source_Name, Text_Content, Added_Date
FROM 
(
   SELECT t.title_name, s.source_name, t1.text_content, t1.added_date   
   FROM Table1 t1
   JOIN Title T 
     ON t1.TitleId = T.TitleId
   JOIN Source S 
     ON t1.SourceId = S.SourceId
   UNION
   SELECT t.title_name, s.source_name, t2.description, t2.added_date   
   FROM Table2 t2
   JOIN Title T 
     ON t2.TitleId = T.TitleId
   JOIN Source S 
     ON t2.SourceId = S.SourceId
   UNION
   SELECT t3.title, 'Unknown', t3.description, t3.added_date   
   FROM Table3 t3
) t
ORDER BY added_date

【讨论】:

  • UNION 应该只获取 DISTINCT 值 - UNION ALL 将返回非不同值。话虽如此,我在上面编辑了我的回复以使用带有 DISTINCT 的子查询(假设您的 RDBMS 支持这些)并添加了 ORDER BY 子句。祝你好运。
猜你喜欢
  • 2021-01-07
  • 1970-01-01
  • 2023-03-11
  • 2012-07-21
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 2021-02-15
  • 1970-01-01
相关资源
最近更新 更多