1

現在、データベースに保存されているバンドの完全な詳細を出力できるように、クエリを作成しようとしています。現在、データベースには 、bandsgigsmembersの5 つのテーブルが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 と一致するデータが含まれているかどうかを確認する 4 つの個別のクエリがあるためです。member_name私が抱えている問題は、を使用するのではなく、などの用語を使用して、すべてを 1 つのクエリで出力したいということget-members.member_nameです。使ってみましJOINたがだめでした。2つのテーブルを使用するだけで機能すると思います。必要に応じて追加の詳細を提供できます。

4

2 に答える 2

4

確かに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

または、データがバンドテーブルにあるが、他のテーブルにはない可能性があることがわかっている場合は、LEFTOUTERJOINを使用できます。

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 に答える