查询从三个表中读取记录

时间:2014-05-28 11:18:32

标签: sql

我需要一个SQL查询来读取三个表中的记录,例如表A,表B,表C.每个表都有ID和creationdatetime列在它们之间是通用的。

我可以从前端插入数据

  1. 在表A中
  2. 或表B
  3. 或表C
  4. 或表A和表B
  5. 或表B和表C
  6. 或表C和表A
  7. 或表A和表B和表C.
  8. 此外,查询返回的数据应根据记录的creationdatetime列按降序排序,并且不应有任何重复。

    请参阅:

    TABLE A: ID   creationdatetime 
    
    TABLE B: ID   creationdatetime
    
    TABLE C: ID   creationdatetime
    

    情境:-1

    TABLEA
    ID    Creationdatetime
    1     2014-05-28 11.00
    
    TABLEB
    ID    Creationdatetime
    1     2014-05-28 11.00
    
    TABLEC
    ID    Creationdatetime
    1     2014-05-28 11.00
    

    情境:-2

    TABLEA
    ID    Creationdatetime
    1     2014-05-28 11.00
    
    TABLEB (No Data)
    ID    Creationdatetime
    
    TABLEC
    ID    Creationdatetime
    1     2014-05-28 11.00
    

    情境:-3

    TABLEA
    ID    Creationdatetime
    1     2014-05-28 11.00
    
    TABLEB (No Data)
    ID    Creationdatetime
    
    TABLEC (No DATA)
    ID    Creationdatetime
    

    情境:-4

    TABLEA
    ID    Creationdatetime
    1     2014-05-28 11.00
    
    TABLEB
    ID    Creationdatetime
    1     2014-05-28 12.00
    
    TABLEC
    ID    Creationdatetime
    1     2014-05-28 13.00
    

    只是添加我上面提到的四个场景。我期待一个应该返回的查询:

    场景:-1,场景:-2,场景:-3 =一个记录和 场景:-4 = 3条记录

    这是一个示例代码,我试图加入两个表:

    select * from TABLEA, TABLEB
    where TABLEA.ID=9205920588298715136
    group by TABLEB.creationdatetime
    order by TABLEB.creationdatetime desc
    

2 个答案:

答案 0 :(得分:0)

select table1.columna,
       table2.columnb,
       table3.columnc

from table1

join table2
    on table1.creationdatetime = table2.creationdatetime 

join table3
    on table3.creationdatetime = table2.creationdatetime 


ORDER BY creationdatetime DESC

你还没有给我足够的关于表格结构的信息,或者哪些数据可能会导致重复...所以我无法回答这个问题。

编辑:我无法发表评论,所以我必须在此处发布,使用联接来获取不同的数据,您可以使用分组和不同的关键字。 (如果你不介意它返回哪一行)

答案 1 :(得分:0)

我认为你应该使用union而不是join。 所有表之间的联合将为您提供所有三个表的不同数据。

Select * from Table1
Union
Select * from Table2
Union
Select * from Table3

考虑所有表都有类似的表结构。

或者如果您想要表的所有列,可以在它们之间使用完全外连接。它会根据您的要求为您提供所有行。

Select * from Table1 A
full outer join table2 B on A.Id = B.Id
Full outer join Table3 C on A.Id = C.Id

希望它有所帮助。