SQL在一个查询中查询多个表

时间:2013-03-20 14:44:48

标签: sql sql-server sql-server-2008

我目前正在尝试创建一个查询,以便输出存储在我的数据库中的波段的完整详细信息。我的数据库中目前有5个表,分别为bandsgigsmemberscommentstracks。我想要做的是将每个表中的所有数据链接到URL变量中提供的相应波段。例如:

<cfquery datasource="#application.datasource#" name="get-details">
    Select *
    From bands, gigs, members, comments, tracks
    Where gig_bandid = URL.id and member_bandid = URL.id and comments_bandid = URL.id and track_bandid = URL.id
</cfquery>

我想这样做,因为目前,我有4个单独的查询检查四个表中的每一个,以查看它们是否包含与URL中提供的带ID匹配的任何数据。我遇到的问题是我希望使用member_name等术语在一个查询中输出所有内容,而不是使用get-members.member_name。我尝试过使用JOIN,但无济于事。我假设只能使用两个表。如果需要,可以提供额外的细节。

2 个答案:

答案 0 :(得分:3)

你当然可以使用JOIN - 如果数据在一个表中而不在另一个表中,则可能需要OUTER JOIN。

SELECT *
FROM bands b
   JOIN gigs g on b.bandid = g.bandid
   JOIN members m on b.bandid = m.bandid
   JOIN comments c on b.bandid = c.bandid
   JOIN tracks t on b.bandid = t.bandid
WHERE b.bandid = URL.id

如果你知道数据在你的乐队表中,你可以使用LEFT OUTER JOIN,但可能不在你的其他表中:

SELECT *
FROM bands b
   LEFT JOIN gigs g on b.bandid = g.bandid
   LEFT JOIN members m on b.bandid = m.bandid
   LEFT JOIN comments c on b.bandid = c.bandid
   LEFT JOIN tracks t on b.bandid = t.bandid
WHERE b.bandid = URL.id

答案 1 :(得分:1)

我认为你在JOIN声明中走的正确方向。

但是,要一次加入5个表,您必须提供一些匹配条件,以便您能够“加入”所有这些表。

该陈述与此类似:

SELECT *
FROM bands    AS b
    JOIN gigs     AS g ON g.bandid = b.bandid
    JOIN members  AS m ON m.bandid = b.bandid
    JOIN comments AS c ON c.bandid = b.bandid
    JOIN tracks   AS t ON t.bandid = b.bandid
WHERE b.bandid = URL.id

加入的标准是 bandid ,它出现在所有5个表中(并且是URL.id)。

如上面的答案中所述,您可以使用JOIN的INNER和OUTER版本。 这篇文章解释了差异:http://www.wellho.net/mouth/158_MySQL-LEFT-JOIN-and-RIGHT-JOIN-INNER-JOIN-and-OUTER-JOIN.html