我目前正在尝试创建一个查询,以便输出存储在我的数据库中的波段的完整详细信息。我的数据库中目前有5个表,分别为bands
,gigs
,members
,comments
和tracks
。我想要做的是将每个表中的所有数据链接到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
,但无济于事。我假设只能使用两个表。如果需要,可以提供额外的细节。
答案 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