카테고리 없음
[mysql] 다른 테이블과 비교하면서 세 번째 테이블에서 레코드 선택
필살기쓰세요
2021. 1. 22. 22:02
원래 쿼리는 거의 정확하며 not in
구문 을 유지하려면 다음과 같이 쿼리를 변경할 수 있습니다.
trans
from 절에 테이블이 필요하지 않으며 아래에 표시된대로 where 절을 약간 변경해야합니다.
이렇게하면 작업 테이블에는 있지만 작업 테이블에는없는 아티스트가 제공됩니다.
SELECT FirstName, LastName
FROM listofartists
JOIN work ON listofartists.ArtistID = work.ArtistID
WHERE work.WorkID NOT IN (SELECT workID FROM trans)
이 쿼리는 작품이 전혀없는 아티스트를 제외하지만, 아티스트가 작품을 판매 및 미 판매 한 경우 모두 포함됩니다. 판매 및 미 판매 작품을 모두 포함하는 아티스트를 제외할지 여부는 명확하지 않습니다.
-------------------a를 사용 left join
하여 관계가 설정 될 수 있는지 확인 하십시오. is null
SELECT listofartists.FirstName, listofartists.LastName
FROM listofartists
LEFT JOIN work ON listofartists.ArtistID = work.ArtistID
LEFT JOIN trans ON trans.WorkID = work.workID
WHERE work.workID IS NULL
-------------------이것은 제약 조건 을 사용 LEFT JOIN
하고 확인 하여 수행 할 수 있습니다 NOT NULL
.
SQL 쿼리는 다음과 같습니다.
SELECT A.FirstName, A.LastName
FROM artists A
JOIN work W ON A.ArtistID = W.ArtistID
LEFT JOIN transactions T ON T.WorkID = W.workID
WHERE T.TransactionID IS NULL
위의 질의에서 우리는 합류 artists
와 함께 테이블을 work
우리가 사용하고, 각 작가의 모든 작품을 얻기 위해 테이블 LEFT JOIN
의 work
와 함께 테이블 transactions
에 관계없이 거래 테이블에서의 엔트리의 모든 작품을 줄 것이다 테이블.
마지막 WHERE 조건은 작업이 트랜잭션에 나타나지 않음을 의미 하는 TransactionID
IS NULL 을 확인하는 것입니다.
출처
https://stackoverflow.com/questions/39917090