반응형
존재하지 않는 MySQL 가입
두 테이블을 조인하는 MySQL 쿼리가 있습니다.
- 유권자
voters.household_id 및 family.id에 가입 한 가구
이제 내가해야 할 일은 voter.id 및 elimination.voter_id와 함께 유권자 테이블이 elimination이라는 세 번째 테이블에 조인되는 위치를 수정하는 것입니다. 제거 테이블의 해당 레코드. 이 작업을 수행하는 쿼리를 어떻게 작성합니까?
이것은 내 현재 쿼리입니다
SELECT `voter`.`ID`, `voter`.`Last_Name`, `voter`.`First_Name`,
`voter`.`Middle_Name`, `voter`.`Age`, `voter`.`Sex`,
`voter`.`Party`, `voter`.`Demo`, `voter`.`PV`,
`household`.`Address`, `household`.`City`, `household`.`Zip`
FROM (`voter`)
JOIN `household` ON `voter`.`House_ID`=`household`.`id`
WHERE `CT` = '5'
AND `Precnum` = 'CTY3'
AND `Last_Name` LIKE '%Cumbee%'
AND `First_Name` LIKE '%John%'
ORDER BY `Last_Name` ASC
LIMIT 30
나는 아마도 Left Join을 사용할 것인데, 이것은 일치하는 것이 없어도 행을 반환 할 것이고, 그런 다음 NULL을 확인하여 일치하지 않는 행만 선택할 수 있습니다.
따라서 다음과 같습니다.
SELECT V.*
FROM voter V LEFT JOIN elimination E ON V.id = E.voter_id
WHERE E.voter_id IS NULL
하위 쿼리를 사용하는 것보다 효율성이 더 높은지 덜 효율적인지 여부는 최적화, 인덱스, 투표자 당 둘 이상의 제거가 가능한지 여부 등에 따라 다릅니다.
제목에서 제안한대로 정확히 '존재하지 않는 곳'을 사용합니다.
SELECT `voter`.`ID`, `voter`.`Last_Name`, `voter`.`First_Name`,
`voter`.`Middle_Name`, `voter`.`Age`, `voter`.`Sex`,
`voter`.`Party`, `voter`.`Demo`, `voter`.`PV`,
`household`.`Address`, `household`.`City`, `household`.`Zip`
FROM (`voter`)
JOIN `household` ON `voter`.`House_ID`=`household`.`id`
WHERE `CT` = '5'
AND `Precnum` = 'CTY3'
AND `Last_Name` LIKE '%Cumbee%'
AND `First_Name` LIKE '%John%'
AND NOT EXISTS (
SELECT * FROM `elimination`
WHERE `elimination`.`voter_id` = `voter`.`ID`
)
ORDER BY `Last_Name` ASC
LIMIT 30
왼쪽 조인을 수행하는 것보다 약간 더 빠를 수 있으며 (물론 인덱스, 테이블의 카디널리티 등에 따라 다름) IN을 사용하는 것보다 훨씬 빠릅니다.
이를 수행하는 세 가지 가능한 방법이 있습니다.
- 선택권
SELECT lt. * FROM table_left lt LEFT JOIN table_right rt ON rt.value = lt.value rt. 값이 NULL 인 경우
- 선택권
SELECT lt. * FROM table_left lt lt. 값이 아닌 곳 ( 값 선택 from table_right rt )
- 선택권
SELECT lt. * FROM table_left lt 존재하지 않는 곳 ( NULL 선택 from table_right rt 여기서 rt.value = lt.value )
참고 URL : https://stackoverflow.com/questions/750343/mysql-join-where-not-exists
반응형
'program tip' 카테고리의 다른 글
Laravel Eloquent-한 줄 가져 오기 (0) | 2020.11.10 |
---|---|
TensorFlow로 개별 작업의 실행 시간을 측정 할 수 있습니까? (0) | 2020.11.10 |
대화 용 소프트 키보드 표시 (0) | 2020.11.10 |
Android 개발을 위해 Eclipse에서 IntelliJ IDEA로 전환 할 때의 이점 (0) | 2020.11.10 |
WCF 웹 서비스 요청의 XML SOAP 요청은 어떻게 받습니까? (0) | 2020.11.10 |