2012-01-14 69 views
0

我正在寻找一种方式将多个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 

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

回答

1

您需要在JOINs阅读起来。你没有说你所使用的关系数据库管理系统,但是这是我在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 
0

OK,所以T1是俱乐部,T2是配套设施的清单,和T3分配的设施去一个俱乐部吧?

可以使用JOIN(内部或外部)语法一次获得来自多个表中的数据。一个OUTER JOIN使用时可以在子表(T2)父表(T1),但没有数据。内连接使用时,你只需要使用两个表中的数据记录。

您还必须包括一个“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 

另外,我想真正改变表的名称,如果我是你,要的东西,更好地代表表中保存的数据。

+0

虽然这将返回多条记录(每个俱乐部设施组合中的一个)。 – 2012-01-14 23:20:31

0

考虑重新命名:

  • t1Clubs及其idclub_id;
  • t2Facilities及其idfacility_id;
  • t3ClubFacilities和删除其不必要id列。

然后,你可以写

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