我正在寻找一种方法来组合多个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
如果有任何想法请分享:)
答案 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)
考虑重命名:
t1
至Clubs
及其id
至club_id
; t2
至Facilities
及其id
至facility_id
; t3
至ClubFacilities
并放弃其不必要的id
列。然后你可以写
SELECT Clubs.*, facility
FROM Clubs
NATURAL JOIN Facilities
NATURAL JOIN ClubFacilities;