카테고리 없음

[mysql] 다른 테이블과 비교하면서 세 번째 테이블에서 레코드 선택

필살기쓰세요 2021. 1. 22. 22:02

원래 쿼리는 거의 정확하며 not in구문 을 유지하려면 다음과 같이 쿼리를 변경할 수 있습니다.

transfrom 절에 테이블이 필요하지 않으며 아래에 표시된대로 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 JOINwork와 함께 테이블 transactions에 관계없이 거래 테이블에서의 엔트리의 모든 작품을 줄 것이다 테이블.

마지막 WHERE 조건은 작업이 트랜잭션에 나타나지 않음을 의미 하는 TransactionID IS NULL 을 확인하는 것입니다.



출처
https://stackoverflow.com/questions/39917090