모든 카테고리, 항목이없는 카테고리까지 표시해야합니다.왜 내 오른쪽 가입이 작동하지 않습니까?
이 쿼리가 있습니다. 반환
SELECT
i.id,
incident_active 'Approved',
incident_verified 'Verified',
category_title 'Category',
ParentCategory 'Parent Category'
FROM
incident i
INNER JOIN
incident_category ic ON i.id = ic.incident_id
RIGHT JOIN
incident_person ip ON i.id = ip.incident_id
RIGHT JOIN
(SELECT
c1.id,
c1.parent_id,
c2.category_title ParentCategory,
CONCAT_WS(' -> ', c2.category_title, c1.category_title) category_title
FROM
category c1
left outer join category c2 ON c1.parent_id = c2.id WHERE c1.parent_id != 0) AS c ON c.id = ic.category_id
WHERE incident_dateadd > DATE_SUB(NOW(), INTERVAL 1 MONTH)
:
이 쿼리 반환
SELECT
c1.id,
c1.parent_id,
c2.category_title ParentCategory,
CONCAT_WS(' -> ', c2.category_title, c1.category_title) category_title
FROM
category c1
left outer join category c2 ON c1.parent_id = c2.id WHERE c1.parent_id != 0
:
몇 번이나이 answer을 읽었지만 내 오른쪽 가입이 작동하지 않는 이유를 알 수 없습니다.
첫 번째 결과 집합은 8 개 개의 기둥이며, 부모 카테고리의 열이 있어야합니다 Protesta
UPDATE 내가 다음 쿼리 아 파크 일하고있어
: 아직도 내가 비록
SELECT * FROM (SELECT
i.id,
incident_title 'Título',
incident_description 'Descripción',
incident_date 'Fecha',
incident_active 'Aprobado',
incident_verified 'Veficado',
person_first 'Nombres',
person_last 'Apellidos',
person_email 'Email',
category_id
-- category_title 'Categoría',
-- ParentCategory 'Categoría Padre'
FROM
incident i
INNER JOIN
incident_category ic ON i.id = ic.incident_id
RIGHT JOIN
incident_person ip ON i.id = ip.incident_id
WHERE (incident_dateadd > DATE_SUB(NOW(), INTERVAL 1 MONTH) OR incident_dateadd IS NULL)) a
RIGHT JOIN
(SELECT
c1.id,
c1.parent_id,
c2.category_title ParentCategory,
CONCAT_WS(' -> ', c2.category_title, c1.category_title) category_title
FROM
category c1
left outer join category c2 ON c1.parent_id = c2.id WHERE c1.parent_id != 0) b ON a.category_id = b.id
첫 번째 버전에서 작동하지 않는 이유를 이해하지 못한다. 두 가지 질문이 모두 같다.
사람이 차이를 설명 할 수 있다면
...
'RIGHT JOIN'을 실행하는 경우에도 다른 테이블의 열 ('WHERE incident_dateadd> DATE_SUB (NOW(), INTERVAL 1 MONTH)')에 필터를 여전히 사용하고 있으므로 모든 'incident' 테이블에 존재하지 않는 행 – Lamak
@Lamak 나는 '작동한다'는 버전을 만들었지 만, 첫 번째 버전이 작동하지 않는 이유는 분명히 알지 못합니다. 의견이 있으시면 고맙게 생각합니다. – Cesar
댓글을 달았지만 분명히 자신을 설명하지 않은 것 같습니다. 그래서 단순화하기 위해'incident'와'category' 테이블 만 있다고 가정 해 봅시다. 인시던트 테이블에서'SELECT * FROM incident i RIGHT JOIN category ON'을 누른 다음 인시던트 테이블 **에서 WHERE i.col1> something'의 컬럼에 필터 **를 수행하면 정의에 따라 카테고리 사건이 없었기 때문에 (i.column이'NULL' 인 경우), 결과에서 걸러내어 첫 번째 장소에서'RIGHT JOIN'을 수행하는 이유를 효과적으로 취소합니다. (또한, 나는'RIGHT JOIN'을 싫어하고 항상 LEFT JOIN을 대신 사용한다.) –
Lamak