2013-01-17 72 views
0

我有以下表结构。需要从所有表中选择那些最近由added_date添加的记录。sql查询从3个表中获取结果

我想从table1, table2, table3中获取titlename, sourcename, description, addde_date那些最近由added_date添加的那些。

标题名称和源名称存储在标题和源表格中。

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

表1

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 

表2

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

表3

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 
+0

哪个SQL味是这样的MSSQL,Oracle,MySQL等...(也哪一个版本) –

回答

0

您应该使用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 
+0

:我怎样才能通过ADDED_DATE申请顺序result.and我有多个时间的标题名称,所以我可以适用不同的结果。 – Kango

+0

UNION应该只抓取DISTINCT值 - UNION ALL会返回非重叠值。就这样说,我已经编辑了上面的回复,以便使用带有DISTINCT的子查询(假设您的RDBMS支持这些)并添加了ORDER BY子句。祝你好运。 – sgeddes