長時間リスナー、初回呼び出し元。Group Byを使用せずにMySQLの多対多クエリーから重複を削除するにはどうすればよいですか?
私はすべての運河を英国の地域に関連付けることができるインターフェイスを作成しています。私はすべての運河のリストを返すためにデータベースが必要です。このリスティングには、運河が編集中の地域にある場合は、運河IDとブリッジテーブルIDも含まれていなければなりません。
(私はそれがどのように見えるかをお見せしたいが、どうやら私は初心者のように二つの画像に限定されたんだ)
関連するテーブルは以下のとおりです。
運河テーブル:ID、名前、説明など 領域テーブル: regions_canalsテーブル同上:ID、left_id(領域)、right_id(運河)
この例では、Iは、ウェスト・ミッドランズ(領域6)に運河を編集しています。私は、運河がすでにWest Midlandsにあると指定されているかどうかを示すメッセージを表示して、MySQLにすべての運河のリストを返すようにします。
私はこのような結果たいと思います:
を(そして、はい、私はオックスフォードはウェスト・ミッドランズではありません知っている)しかし、私は実際に取得することはこれです:
この例では、スランゴスレン、オックスフォード、シュロップシャー連合運河を二重に取得しています。私は、余分な運河を取り除くために必要ではなく、領域に対応するもの(left_id)6.
これは動作するはずですが示唆されています:
SELECT regions_canals.id AS bridge_id, regions.id AS left_id, regions.name AS region_name, canals.id AS right_id, canals.name AS canal_name
FROM canals
LEFT JOIN regions_canals ON regions_canals.right_id = canals.id
LEFT JOIN regions ON regions_canals.left_id = regions.id
GROUP BY canals.id
ORDER BY canal_name;
しかし、これは、次のMySQLのエラーメッセージになり:
#1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'nbb.regions_canals.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
これはほとんど動作します:
SELECT canals.id, canals.name, IF(
canals.id IN
(SELECT canals.id
FROM canals
JOIN regions_canals ON regions_canals.right_id = canals.id
JOIN regions ON regions_canals.left_id = regions.id
WHERE regions.id = 6), true, false)
AS region from canals
ORDER BY canals.name;
私が言うことができた運河West Midlandsにありますが、bridge_idは含まれていません。West Midlandsのような地域(オックスフォードのような)から運河を取り除きたい場合は、私が必要です。
んが、画像のおかげで。ちょうどよく書式設定されたテキスト。長い時間聞き手として、それを行う方法はかなり明らかにする必要があります – Strawberry
私はこの中でエイリアスとして使用された左と右を見たことがない。それはあなたのアイデアですか?それは非常に混乱しています! – Strawberry