5
LEFT JOINS를 사용하여 고아가 된 menu_item 레코드를 찾은 다음 NULL 값을 확인하려고합니다.LEFT JOIN을 사용하여 MySQL에서 분리 된 레코드 찾기
아래의 쿼리는 실제로 고아가 아닌 결과를 반환합니다. mitem_id는 menu_item 테이블의 기본 키이고 price_info 테이블의 외래 키입니다. pinfo_id는 price_info 테이블의 기본 키이고 외래 키 orderdetails 테이블입니다. 기록의
SELECT DISTINCT mi.mitem_id, descr
FROM menu_item mi
LEFT JOIN price_info pi ON pi.menu_item = mi.mitem_id
LEFT JOIN orderdetails od ON od.price_info = pi.pinfo_id
WHERE od.detail_id IS NULL;
하나는이 같은 모습을 반환 : 나는 고아하지 알고 어떻게
+----------+------------------+
| mitem_id | descr |
+----------+------------------+
| 926 | Alameda Pale Ale |
+----------+------------------+
나는 쿼리를 실행할 때 때문이다
SELECT od.detail_id
FROM orderdetails od
INNER JOIN price_info pi ON pi.pinfo_id = od.price_info
INNER JOIN menu_item mi ON mi.mitem_id = pi.menu_item
WHERE mi.mitem_id = 926;
그것은의 집합을 반환 기록 :
+-----------+
| detail_id |
+-----------+
| 142830 |
| 142876 |
| 143394 |
| 143610 |
왜 고아가 아닌 결과를 돌려 주는가?
LEFT JOIN은 "왼쪽"테이블에있는 모든 항목을 반환하며, "오른쪽"테이블에있을 수도 있고 그렇지 않을 수도 있습니다. "왼쪽"테이블에 있기 때문에 여전히 "오른쪽"테이블에있는 레코드를 반환합니다. –
OUTER JOIN을 사용하는 경우 JOINS 시퀀스가 결과와 관련이 있습니다. 귀하의 질문은 매우 다릅니다. 다른 테이블에 대해 최소한의 샘플 데이터를 추가해야합니다. – VMai
detaildid가 NULL 인 orderdetails에서 하나 이상의 행이 조인 될 수 있습니까? 즉, menu_item 및 price_info와 일치하는 orderdetails의 행이 여러 개있을 수 있으며 적어도 하나는 NULL이 아닙니다. – kane