문제

나는 이것으로 올바른 길을 가고 있다고 생각합니다 ... 내 SQL이 가장 크지 않기 때문에 저와 함께 부탁드립니다.

특정 셀이 다른 셀에 존재하지 않는 한 테이블에서 모든 것을 선택하기 위해 데이터베이스를 쿼리하려고합니다. 그다지 말이 많지 않지만이 코드가

SELECT * from employees WHERE NOT EXISTS (SELECT name FROM eotm_dyn)

기본적으로 직원 목록과 세부 사항이있는 테이블 하나가 있습니다. 그런 다음 이름을 포함하여 다른 세부 사항이있는 다른 테이블. EOTM_DYN 테이블에 이름이없는 경우, 입력이 없다는 것을 의미합니다. 즉, 그들이 누구인지 정확히보고 싶습니다. 즉, 정확히 무엇이 빠진지보고 싶습니다.

위의 쿼리는 아무것도 반환하지 않지만 20 개의 이름이 누락되어 있다는 것을 알고 있으므로 분명히 제대로 얻지 못했습니다.

누구든지 도울 수 있습니까?

도움이 되었습니까?

해결책

쿼리에서 테이블에 가입하지 않았습니다.

당신의 원래 쿼리는 기록이 없으면 항상 아무것도 반환하지 않습니다. eotm_dyn,이 경우 모든 것을 반환합니다.

이 테이블을 연결해야한다고 가정합니다 employeeID, 다음을 사용하십시오.

SELECT  *
FROM    employees e
WHERE   NOT EXISTS
        (
        SELECT  null 
        FROM    eotm_dyn d
        WHERE   d.employeeID = e.id
        )

이 테이블에 참여할 수 있습니다 LEFT JOIN 키워드 및 필터링 NULL그러나 이것은 사용하는 것보다 효율적 일 수 있습니다. NOT EXISTS.

다른 팁

SELECT * FROM employees WHERE name NOT IN (SELECT name FROM eotm_dyn)

또는

SELECT * FROM employees WHERE NOT EXISTS (SELECT * FROM eotm_dyn WHERE eotm_dyn.name = employees.name)

또는

SELECT * FROM employees LEFT OUTER JOIN eotm_dyn ON eotm_dyn.name = employees.name WHERE eotm_dyn IS NULL

왼쪽 결합을 수행하고 결합 된 열이 NULL이라고 주장합니다.

예시:

SELECT * FROM employees a LEFT JOIN eotm_dyn b on (a.joinfield=b.joinfield) WHERE b.name IS NULL
SELECT * from employees
WHERE NOT EXISTS (SELECT name FROM eotm_dyn)

그렇지 않으면 레코드를 반환하지 마십시오 eotm_dyn 비었다. 어떤 종류의 기준이 필요합니다 SELECT name FROM eotm_dyn 처럼

SELECT * from employees
WHERE NOT EXISTS (
    SELECT name FROM eotm_dyn WHERE eotm_dyn.employeeid = employees.employeeid
)

두 테이블이 외국의 주요 관계로 연결되어 있다고 가정합니다. 이 시점에서 왼쪽 조인을 포함한 다양한 옵션을 사용할 수 있습니다. 그러나 Optimizer는 일반적으로 대부분의 경우 동일하게 처리합니다.

당신은 또한 볼 수 있습니다 이 관련 질문. 해당 사용자는 조인을 사용하여 하위 쿼리를 사용하는 것보다 더 나은 성능을 제공했다고보고했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top