あなたはすでに今、二次のものと同じ操作を行い、主要ポストコードに参加し、それらをリストアップしています。
SELECT
e.Engineer,
GROUP_CONCAT(DISTINCT pc1.Post_Code) AS Primary_Post_Codes_Assigned,
GROUP_CONCAT(DISTINCT pc2.Post_Code) AS Secondary_Post_Codes_Assigned,
e.Region,
e.active,
e.Engineer_id
FROM Engineer e
JOIN Post_Code pc1 ON e.Engineer_id = pc1.Engineer_id
JOIN Post_Code pc2 ON e.Engineer_id = pc2.Secondary_Engineer_id
GROUP BY e.Engineer_id;
ご覧のとおり、すべてのプライマリおよびセカンダリのすべての郵便番号を選択するとき、あなたは中間結果でそれらのすべての組み合わせの行を取得しているので、あなたはDISTINCT
を必要としています。だから、重複をなくす必要があります。このため、参加する前に集計する方が良いです。 (あなたはどちら集計で作業する場合、この習慣にしたいことがありので、私は一般的に、良いアイデアを検討してください。)
SELECT
e.Engineer,
pc1.Post_Codes AS Primary_Post_Codes_Assigned,
pc2.Post_Codes AS Secondary_Post_Codes_Assigned,
e.Region,
e.active,
e.Engineer_id
FROM Engineer e
JOIN
(
SELECT Engineer_id, GROUP_CONCAT(Post_Code) AS Post_Codes
FROM Post_Code
GROUP BY Engineer_id
) pc1 ON e.Engineer_id = pc1.Engineer_id
JOIN
(
SELECT Secondary_Engineer_id, GROUP_CONCAT(Post_Code) AS Post_Codes
FROM Post_Code
GROUP BY Secondary_Engineer_id
) pc2 ON e.Engineer_id = pc2.Secondary_Engineer_id;
第三の選択肢はSELECT
句でサブクエリだろう。私は通常、図のようにFROM
節にあることを好みます。SELECT
節では不可能な列をサブクエリに追加するのは簡単です。
SELECT
e.Engineer,
(
SELECT GROUP_CONCAT(pc1.Post_Code)
FROM Post_Code pc1
WHERE pc1.Engineer_id = e.Engineer_id
) AS Primary_Post_Codes_Assigned,
(
SELECT GROUP_CONCAT(pc2.Post_Code)
FROM Post_Code pc2
WHERE pc2.Secondary_Engineer_id = e.Engineer_id
) AS Secondary_Post_Codes_Assigned,
e.Region,
e.active,
e.Engineer_id
FROM Engineer e;
現在のクエリにはいくつかの問題があります。サンプルデータを表示できますか? –
@Tim Biegeleisen:いくつかの問題?どちら?あなたは 'GROUP BY Engineer_id'の欠けている修飾子を参照していますか?私は他の人が見えないことを認めなければならない。 –
一般に、プレゼンテーション層にデータ表示の問題を処理する方が良いです。 – Strawberry