2017-03-02 1 views
0

좋아,이 문제가있어. 나는 다음과 같은 테이블이 있습니다SQL 다른 조인 조건으로 같은 필드를 사용하는 방법?

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 및 공급 업체는 member.role_id의 동일한 입력란에서 온 것입니다.

아무도 도와 줄 수 없습니까? 나는 매우 고맙게 생각할 것이다 :

+0

는'0'는 뜻 A' 후'무엇입니까? 그게 문법 오류 같아. – Barmar

+0

'm.id = s.member_id'는 항상 참이됩니다. 왜냐하면 그것은 결합의 '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

관련 문제