从三个表中选择数据?

时间:2011-03-14 17:05:34

标签: sql select

如何编写SQL语句以从三个表中选择数据?

6 个答案:

答案 0 :(得分:12)

使用联接

SELECT *
FROM table_1
JOIN table_2 ON (table_2.table_1_id = table_1.table_1_id)
JOIN table_3 ON (table_3.table_1_id = table_1.table_1_id)

这将要求每个表都有一个table_1_id键,并且每个表中都有一个条目。

如果table_2或table_3可能没有数据但您仍想显示table_1中的数据,则可以使用LEFT JOIN

答案 1 :(得分:6)

这是一个非常一般的例子:

SELECT KEYVAL, A.OTHER_COL, B.ANOTHER_COL, C.YET_ANOTHER_COL
  FROM TABLE_A A
  INNER JOIN TABLE_B B
    USING (KEYVAL)
  INNER JOIN TABLE_C C
    USING (KEYVAL)

如果您的数据库不支持USING,您可以说:

SELECT A.KEYVAL, A.OTHER_COL, B.ANOTHER_COL, C.YET_ANOTHER_COL
  FROM TABLE_A A
  INNER JOIN TABLE_B B
    ON (B.KEYVAL = A.KEYVAL)
  INNER JOIN TABLE_C C
    ON (C.KEYVAL = A.KEYVAL)

或者你可以说

SELECT A.KEYVAL, A.OTHER_COL, B.ANOTHER_COL, C.YET_ANOTHER_COL
  FROM TABLE_A,
       TABLE_B,
       TABLE_C
  WHERE B.KEYVAL = A.KEYVAL AND
        C.KEYVAL = A.KEYVAL

但我认为后者不太清楚。

分享并享受。

答案 2 :(得分:2)

如果您的表具有相同的模式,并且您希望基本上连接每个表中的行,那么您应该考虑UNION查询。

SELECT
Field1, Field2, Field3
FROM Table1
UNION
SELECT
Field1, Field2, Field3
FROM Table2
UNION
SELECT
Field1, Field2, Field3
FROM Table3

如果您想在结果集的单行中包含每个表格中的相关数据,那么您应该查看使用INNER JOIN和/或OUTER JOIN s。

SELECT Table1.Field1, Table2.Field2, Table3.Field3
FROM Table1
INNER JOIN Table2 ON Table1.Field1=Table2.Field1
LEFT OUTER JOIN Table3 on Table1.Field3=Table3.Field3

我们需要您提供更多信息,以便为您提供明确的答案,包括您正在使用的RDBMS。

答案 3 :(得分:1)

查看Join(SQL)子句。

你可以和第二张桌子一起加入你的第一张桌子。然后你第三张桌子到你的第一张或第二张桌子。

例如:

SELECT * 
FROM TABLE_A
JOIN TABLE_B ON TABLE_A.ID = TABLE_B.ID
JOIN TABLE_C ON TABLE_C.ID = TABLE_B.ID

答案 4 :(得分:1)

使用联接,您可以从三个表中选择数据

SELECT column_name(s)
FROM table1
JOIN 
  table2 ON table1.column_name = table2.column_name
JOIN 
  table3 ON table3.column_name = table2.column_name;

答案 5 :(得分:-3)

从三个表中选择数据,例如国家/地区和城市的联接

选择country.country,country.countryid,countrystate.state,  来自国家的countrystatecity.city 内联盟国家 上(country.countryid = countrystate.countryid) 内部联盟countrystatecity 上(countrystate.stateid = countrystatecity.stateid)