0

このクエリがあります

SELECT f.id_film, title, year, GROUP_CONCAT(actor SEPARATOR '|') AS 'actors',
GROUP_CONCAT(director SEPARATOR '|') AS 'directors' 
FROM film f JOIN middle m ON f.id_film = m.id_film
JOIN actors a ON m.id_name = a.id_actor 
JOIN directors d ON m.id_name = d.id_director 
WHERE id_category = "com" GROUP BY f.id_film

テーブル アクターとテーブル ディレクターから名前を収集する必要があります。中央のテーブルは、実際には 2 つのテーブル間の「ジョイナー」であり、「a」または「d」のいずれかの値を保持する列「タイプ」によって一方を他方と区別します。俳優と監督を適切に分離することができません。つまり、クエリはタイプに関係なくすべての ID を返します。サブクエリを試しましたが成功しませんでした。任意の提案をいただければ幸いです。ありがとう

4

1 に答える 1

0

アクターとディレクターのテーブルに参加しているときに、中央のテーブルの「タイプ」フィールドの比較を含めることが欠落していると思います。

以下を試してください:

SELECT f.id_film, title, year, GROUP_CONCAT(actor SEPARATOR '|') AS 'actors',
GROUP_CONCAT(director SEPARATOR '|') AS 'directors' 
FROM film f JOIN middle m ON f.id_film = m.id_film
LEFT JOIN actors a ON m.id_name = a.id_actor AND m.type = 'a'
LEFT JOIN directors d ON m.id_name = d.id_director AND m.type = 'd'
WHERE id_category = "com" GROUP BY f.id_film

@michael参照SqlFiddle、データベーススキーマステートメントを配置し、サンプルデータステートメントを左側に挿入する必要があります。質問にリンクと期待される出力を提供して、サンプルデータでソリューションを試すことができます。

于 2013-05-09T09:51:16.580 に答える