오른쪽 조인을 사용하면 왼쪽 조인을 사용하거나 그냥 조인하는 것과 동일한 결과를 얻습니다. 아무도 내가 어디에서 잘못했는지 보여줄 수 있습니까?
다음과 같이 3 개의 테이블이 있습니다.
신분증
코드 예 : "hu", "en"
신분증
본문
신분증
lang_id (FK 언어 테이블의 언어 ID)
default_lang_id (FK는 languages_default 테이블의 텍스트 ID)
텍스트 (번역)
다음 쿼리를 실행하면 language_translations 테이블에서 모든 헝가리어 번역을 가져오고 헝가리어 번역이없는 null 값을 가진 language_default 테이블에서 모든 텍스트 필드를 가져올 것으로 예상합니다.
SELECT `language_translations`.`text`
, `language_default`.`text`
FROM `languages`
, `language_translations`
RIGHT JOIN `language_default` ON `language_default`.`id` = `language_translations`.`default_lang_id`
WHERE `languages`.`code` = 'hu'
AND `languages`.`id` = `language_translations`.`lang_id`
대신 tranlsation 테이블의 해당 텍스트에 대한 번역이있는 language_default 테이블에서만 텍스트를 가져옵니다. 왼쪽 조인 또는 일반 조인에서 그 동작을 예상하지만 오른쪽 조인은 아닙니다. langugage_defailt 테이블에서 모든 항목을 얻지 못하는 이유는 무엇입니까?
우선 정상적인 조인과 권리 조인의 조합을 잘못된 방식으로 사용하고 있습니다. 아래 쿼리에 따라 사용할 수 있습니다.
두 번째로 오른쪽 조인은 오른쪽에서 모든 레코드를 가져오고 왼쪽에서 해당 레코드를 가져오고 왼쪽에 해당 레코드가 없으면 NULL을 표시합니다.
왼쪽 결합은 그 반대입니다.
일반 결합 또는 쉼표 결합은 공통 행만 제공합니다.
따라서 테이블에 공통 행만있는 경우 모든 조인이 동일한 결과를 제공합니다.
SELECT
`language_translations`.`text` , `language_default`.`text`
FROM `languages` AS l
JOIN `language_translations` AS t
ON l.`id` = t.`lang_id` AND l.`code` = 'hu'
RIGHT JOIN `language_default` AS d
ON d.`id` = t.`default_lang_id`;
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다