1

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

<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但无济于事。我假设只能使用两个表。如果需要,可以提供额外的细节。

4

2 回答 2

4

您当然可以使用 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
于 2013-03-20T14:49:07.307 回答
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

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

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

于 2013-03-20T14:55:24.137 回答