2017-03-02 8 views
0

私はこの問題を抱えています。私は、次の表を持っている:異なるジョイン条件で同じフィールドを使用する方法は?

member 
id | username  | role_id | full_name  | 
1 | [email protected] | 1  | administrator | 
2 | [email protected] | 2  | Sunkist   | 
3 | [email protected] | 2  | BlueJam   | 
4 | [email protected] | 3  | Fresh Shop  | 
5 | [email protected] | 3  | Other Shop  | 

role 
id | role   | 
1 | superadmin | 
2 | vendor  | 
3 | shop   | 

fruits 
id | fruit_name | barcode | vendor_id | 
1 | banana  | 12345 | 2  | 
2 | melon   | 23456 | 2  | 
3 | apel   | 34567 | 3  | 
4 | orange  | 45678 | 3  | 
5 | papaya  | 56789 | 2  | 

shop_base 
id | fruit_id | member_id | 
1 | 1  | 4  | 
2 | 1  | 5  | 
3 | 2  | 4  | 
4 | 2  | 5  | 
5 | 3  | 5  | 
6 | 4  | 5  | 
7 | 5  | 5  | 

私はこのクエリで元気です:

SELECT f.barcode, f.fruit_name, m.full_name AS vendor, f.id AS fruit_id 
FROM fruits AS f 
LEFT JOIN member AS m ON f.vendor_id = m.id 
WHERE f.vendor_id > 0 
GROUP BY f.barcode 
ORDER BY f.barcode DESC 

結果:

barcode | fruit_name | vendor | fruit_id | 
56789 | papaya  | Sunkist | 5   | 
45678 | orange  | BlueJam | 4   | 
34567 | apel   | BlueJam | 3   | 
23456 | melon   | Sunkist | 2   | 
12345 | banana  | Sunkist | 1   | 

が、今私はこのようなお店の列を追加する必要があります。

barcode | fruit_name | vendor | fruit_id | shop_name    | 
56789 | papaya  | Sunkist | 5   | Other Shop    | 
45678 | orange  | BlueJam | 4   | Other Shop    | 
34567 | apel   | BlueJam | 3   | Other Shop    | 
23456 | melon   | Sunkist | 2   | Fresh Shop, Other Shop | 
12345 | banana  | Sunkist | 1   | Fresh Shop, Other Shop | 

これは私がこれまでに得た方法ですが、方法はshop_nameフィールドにnullを返します。

SELECT f.barcode, f.fruit_name, m.full_name AS vendor, f.id AS fruit_id, GROUP_CONCAT(CONCAT(CASE WHEN m.id = s.member_id THEN m.full_name END) SEPARATOR ', ') shop_name 
FROM fruits AS f 
LEFT JOIN member AS m ON f.vendor_id = m.id 
LEFT JOIN shop_base AS s ON m.id = s.member_id 
WHERE f.vendor_id > 0 
GROUP BY f.barcode 
ORDER BY f.barcode DESC 

私はprobleがこの上だと思う: "GROUP_CONCAT(CONCAT(CASE m.id = s.member_id THEN m.full_name END)SEPARATOR '')shop_name" shop_nameとvendorはmember.role_idの同じフィールドにあります

誰でも教えてください。私は非常に感謝します:)

+0

は '0'を意味することになってA'後 'は何ですか?それは私に構文エラーのように見えます。 – Barmar

+0

'm.id = s.member_id'は常にtrueになります。これは、結合の 'ON'条件です。 – Barmar

+0

@Barmar申し訳ありません私の悪い、私は私がすでにそれを修正した質問を書くときに私の指が滑ると思います – fandiahm

答えて

1

あなたはmemberと二度参加する必要があります。一度fruits.vendor_idに基づいてベンダー名を取得し、shop_baseに基づいてショー名を取得するには別途取得してください。

SELECT f.barcode, f.fruit_name, m.full_name AS vendor, f.id AS fruit_id, GROUP_CONCAT(m1.full_name SEPARATOR ', ') shop_name 
FROM fruits AS f 
LEFT JOIN member AS m ON f.vendor_id = m.id 
LEFT JOIN shop_base AS s ON f.id = s.fruit_id 
LEFT JOIN member AS m1 ON s.member_id = m1.id 
WHERE f.vendor_id > 0 
GROUP BY f.barcode 
ORDER BY f.barcode DESC 

DEMO

+0

ありがとう、それは働いています:) – fandiahm

関連する問題