반응형
항목이 다른 테이블에 없는지 확인하는 중
테이블은 다음과 같이 세팅되어 있습니다.
table name: process
fields: name, id_string
table name: value_seach
fields: id_string, value
value_search에 엔트리가 없는 프로세스 이름(각 id_string)을 모두 표시하는 선택문을 작성하려고 합니다.
프로세스 테이블의 id_string은 null일 수 있으며 이름은 가질 수 있지만 가능하면 제외해야 합니다.value_search의 id_string은 null일 수 없습니다.
이거 어떻게 해?
일반적으로 다른 테이블에 존재하지 않는 행을 원하는 경우 다른 테이블에 LEFT JOIN하고 WHERE...두 번째 테이블의 컬럼에 대해서는 IS NULL입니다.또한 process.id_string이 NULL인 행을 원하지 않는다고 언급했습니다.
SELECT p.name, p.id_string
FROM
process p
LEFT JOIN value_search v
ON v.id_string = p.id_string
WHERE
v.id_string IS NULL
AND p.id_string IS NOT NULL
이것은 안티 조인이라고 알려져 있습니다.
사용하는 것 같습니다.Not Exists
여기서 하는 게 최선일 거야
SELECT p.name, p.id_string
FROM process p
WHERE
NOT p.id_string IS NULL AND
NOT EXISTS(
SELECT NULL
FROM value_search v
WHERE p.id_string = v.id_string)
원하는 쿼리는 다음과 같습니다.WHERE 절의 서브쿼리보다 JOIN이 훨씬 빠릅니다.
SELECT p.name, p.id_string
FROM process p
LEFT OUTER JOIN value_search v
ON p.id_string = v.id_string
AND p.id_string IS NOT NULL
AND v.id_string IS NULL
위의 쿼리에서 동일하게 유효한 변형은 다음과 같습니다.
SELECT p.name, p.id_string
FROM process p
LEFT OUTER JOIN value_search v
ON p.id_string = v.id_string
WHERE
p.id_string IS NOT NULL
AND v.id_string IS NULL
SELECT
name,
id_string
FROM process
WHERE id_string IS NOT NULL AND id_string NOT IN SELECT id_string FROM value_seach
언급URL : https://stackoverflow.com/questions/9366021/checking-whether-an-item-does-not-exist-in-another-table
반응형
'programing' 카테고리의 다른 글
POSTMAN에 객체가 존재하는지 확인하는 방법 (0) | 2023.03.14 |
---|---|
$scope에서 컨트롤러 이름 가져오기 (0) | 2023.03.14 |
ORA-01653: 테이블스페이스 ORA-06512에서 테이블을 확장할 수 없음 (0) | 2023.03.14 |
React js 상위 구성 요소에서 하위 구성 요소 상태 변경 (0) | 2023.03.14 |
WordPress 테마에 주석을 추가하는 방법 (0) | 2023.03.14 |