[SQL] 왼쪽 Where 절과 함께 가입
SQL왼쪽 Where 절과 함께 가입
내가 설정 테이블의 모든 기본 설정을 검색하지만 X 문자가있는 경우, 또한 문자 설정을 잡아해야합니다.
그러나이 쿼리는 문자 = 1 이러한 설정이 아닌 사용자 havent 한 사람을 잘 살고 경우 기본 설정을 검색하는 중입니다.
SELECT `settings`.*, `character_settings`.`value`
FROM (`settings`)
LEFT JOIN `character_settings`
ON `character_settings`.`setting_id` = `settings`.`id`
WHERE `character_settings`.`character_id` = '1'
그래서 나는이 같은 뭔가가 필요합니다 :
array(
'0' => array('somekey' => 'keyname', 'value' => 'thevalue'),
'1' => array('somekey2' => 'keyname2'),
'2' => array('somekey3' => 'keyname3')
)
키 1과 2는 기본 값은 어디 키 0은 문자 값과 기본값이 포함 된 경우.
해결법
-
==============================
1.WHERE 절은 왼쪽 성공하지 못한 조인 행을 멀리 필터링됩니다. 조인으로 이동 :
WHERE 절은 왼쪽 성공하지 못한 조인 행을 멀리 필터링됩니다. 조인으로 이동 :
SELECT `settings`.*, `character_settings`.`value` FROM `settings` LEFT JOIN `character_settings` ON `character_settings`.`setting_id` = `settings`.`id` AND `character_settings`.`character_id` = '1'
-
==============================
2.만드는 외부 (ANSI-89 또는 ANSI-92)을 조인 할 때 조인하기 전에 ON 절에 지정된 기준이 적용되기 때문에 여과 위치 문제가된다. (가) 제조 조인 후 OUTER 대해 기준이인가된다 WHERE 절에 제공된 테이블 합류. 이것은 매우 다른 결과 세트를 생성 할 수 있습니다. 결과는 동일합니다 - 비교,이 기준이 ON 또는 WHERE 절에 제공되는 경우 내부 조인에 대한 문제가되지 않습니다.
만드는 외부 (ANSI-89 또는 ANSI-92)을 조인 할 때 조인하기 전에 ON 절에 지정된 기준이 적용되기 때문에 여과 위치 문제가된다. (가) 제조 조인 후 OUTER 대해 기준이인가된다 WHERE 절에 제공된 테이블 합류. 이것은 매우 다른 결과 세트를 생성 할 수 있습니다. 결과는 동일합니다 - 비교,이 기준이 ON 또는 WHERE 절에 제공되는 경우 내부 조인에 대한 문제가되지 않습니다.
SELECT s.*, cs.`value` FROM SETTINGS s LEFT JOIN CHARACTER_SETTINGS cs ON cs.setting_id = s.id AND cs.character_id = 1
-
==============================
3.나는 당신의 질문을 이해한다면 그들이이 character_settings 테이블 건너에 가입하거나이없는 경우 올바르게 설정 데이터베이스에서 레코드를 원하는 합류 기록은 character_id = 1이있는 경우.
나는 당신의 질문을 이해한다면 그들이이 character_settings 테이블 건너에 가입하거나이없는 경우 올바르게 설정 데이터베이스에서 레코드를 원하는 합류 기록은 character_id = 1이있는 경우.
그러므로 당신은 무엇을해야
SELECT `settings`.*, `character_settings`.`value` FROM (`settings`) LEFT OUTER JOIN `character_settings` ON `character_settings`.`setting_id` = `settings`.`id` WHERE `character_settings`.`character_id` = '1' OR `character_settings`.character_id is NULL
-
==============================
4.당신은 간단한 하위 쿼리를 사용하여 이해하기 쉽게 찾을 수 있습니다
당신은 간단한 하위 쿼리를 사용하여 이해하기 쉽게 찾을 수 있습니다
SELECT `settings`.*, ( SELECT `value` FROM `character_settings` WHERE `character_settings`.`setting_id` = `settings`.`id` AND `character_settings`.`character_id` = '1') AS cv_value FROM `settings`
당신이 WHERE 주 쿼리에 대한 / 가입 걱정할 필요가 없습니다 있도록 하위 쿼리가 반환 null로 허용됩니다.
때때로이 빠른 MySQL의에서 작동하지만, 좌 비교할 당신을 위해 가장 적합한보고 양식을 가입하세요.
SELECT s.*, c.value FROM settings s LEFT JOIN character_settings c ON c.setting_id = s.id AND c.character_id = '1'
-
==============================
5.결과는 SQL 문을 기반으로 올바른 것입니다. 왼쪽은 왼쪽 테이블에서 오른쪽 테이블에서 반환 모든 값을, 만 일치하는 값에 가입하세요.
결과는 SQL 문을 기반으로 올바른 것입니다. 왼쪽은 왼쪽 테이블에서 오른쪽 테이블에서 반환 모든 값을, 만 일치하는 값에 가입하세요.
ID와 NAME 열, 오른쪽 테이블에서 너무 반환합니다.
점수는 왼쪽 테이블에서이며,이 값이 이름 "흐름"에 관련된 30, 반환됩니다. 그들은 이름 "흐름"에 관련되지 않는 다른 이름은 NULL입니다.
아래 당신이 기대했던 결과를 반환합니다 :
SELECT a.*, b.Score FROM @Table1 a LEFT JOIN @Table2 b ON a.ID = b.T1_ID WHERE 1=1 AND a.Name = 'Flow'
는 SQL은 오른쪽 테이블에 필터를 적용합니다.
-
==============================
6.이 문제에 대한 비 사소한 왼쪽 조인을 포함하는 많은 다른 사람과 같은 왼쪽에 합류 내부에 가입 한 테이블에, 나는 그것이 편리하고 좀 더 읽을 절와 함께 쿼리를 분할 찾을 수 등. 당신의 예에서,
이 문제에 대한 비 사소한 왼쪽 조인을 포함하는 많은 다른 사람과 같은 왼쪽에 합류 내부에 가입 한 테이블에, 나는 그것이 편리하고 좀 더 읽을 절와 함께 쿼리를 분할 찾을 수 등. 당신의 예에서,
with settings_for_char as ( select setting_id, value from character_settings where character_id = 1 ) select settings.*, settings_for_char.value from settings left join settings_for_char on settings_for_char.setting_id = settings.id;
from https://stackoverflow.com/questions/4752455/left-join-with-where-clause by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 날짜 시간과 같거나 MySQL은 오늘보다 더 큰 (0) | 2020.03.31 |
---|---|
[SQL] CTE와 하위 쿼리의 차이? (0) | 2020.03.31 |
[SQL] MySQL 데이터베이스에서 통화 값을 저장하기위한 최고의 데이터 유형 (0) | 2020.03.31 |
[SQL] 으로 SQL Server 테이블 열에서 문자열을 대체하는 방법 (0) | 2020.03.31 |
[SQL] SQL은 오름차순으로 정렬 할 때 널 (null) 값이 마지막으로 올 수 있도록하는 방법 (0) | 2020.03.31 |