将多个SQL查询组合到一个语句中

时间:2012-01-14 23:11:39

标签: sql

我正在寻找一种方法来组合多个SQL查询以节省必须继续调用数据库。我有三张桌子,一张有俱乐部的细节,一张有俱乐部设施,第三张用它们组合。

以下是表格的简单版本:

t1

id, name, city
1, curby, London
2, zoo, Birmingham

T2

id, facility
1, bar
2, function suite
3, VIP room

T3

id, club_id, facility_id
1, 2, 1
2, 2, 3
3, 1, 2
4, 2, 2

在上述所有内容中,第一列(id)只是唯一标识符,我使用逗号显示每个字段分隔的位置。我想从数据库中得到的是:

1, curby, London, function suite
2, zoo, Birmingham, bar, VIP room, function suite

如果有任何想法请分享:)

3 个答案:

答案 0 :(得分:1)

您需要阅读JOINs。您没有说出您正在使用的RDMS,但这是我在Oracle中使用的内容:

SELECT t3.id, t2.name, t2.city, t3.facility
  FROM t3
 INNER JOIN t2 ON t2.id = t3.facility_id
 INNER JOIN t1 ON t1.id = t3.club_id

答案 1 :(得分:0)

好的,所以t1是俱乐部,t2是一个facilties列表,而t3为俱乐部分配设施,对吗?

您可以使用JOIN(INNER或OUTER)语法一次从多个表中获取数据。当父表(t1)中有数据但子表(t2)中没有数据时,使用OUTER JOIN。当您只想要在两个表中都包含数据的记录时,使用INNER JOIN。

您还必须包含一个“ON”子句,指示两个表如何连接在一起:

SELECT t1.id as club_id, t1.name as club_name, t2.facility as facility_name
FROM t1
INNER JOIN t2 ON
    t2.club_id=t1.id
INNER JOIN t3 ON
    t3.id=f2.facility_id

另外,如果我是你,我实际上会更改表格的名称,以更好地代表表格中的数据。

答案 2 :(得分:0)

考虑重命名:

  • t1Clubs及其idclub_id;
  • t2Facilities及其idfacility_id;
  • t3ClubFacilities并放弃其不必要的id列。

然后你可以写

SELECT Clubs.*, facility
  FROM Clubs 
       NATURAL JOIN Facilities 
       NATURAL JOIN ClubFacilities;