programing

두 개의 열을 사용하는 mysql "Where not in"

testmans 2023. 7. 24. 22:21
반응형

두 개의 열을 사용하는 mysql "Where not in"

다음을 포함하는 임시 테이블이 하나 있습니다.userID그리고.taskID라고 합니다.CompletedTasks.
두 번째 테이블에는 다음이 포함되어 있습니다.userID그리고.taskID라고 합니다.PlannedTasks.

나는 모든 사람들의 목록이 필요합니다.taskID완료되었지만 계획되지 않은 s.
따라서 완료된 작업에서 다음과 같은 모든 행을 제거해야 합니다.

PlannedTasks.userID != CompletedTasks.userID 

그리고.

PlannedTasks.taskID != CompletedTasks.taskID

다음을 사용할 수 있습니다(더 간결한 구문).

SELECT *
FROM CompletedTasks
WHERE (userID, taskID) NOT IN
      ( SELECT userID, taskID
        FROM PlannedTasks
      ) ;

또는NOT EXISTS버전(더 복잡하지만 적절한 인덱스를 사용하면 더 효율적이어야 함):

SELECT c.*
FROM CompletedTasks AS c
WHERE NOT EXISTS 
      ( SELECT 1
        FROM PlannedTasks AS p
        WHERE p.userID = c.userID
          AND p.taskID = c.taskID
      ) ;

그리고 물론.LEFT JOIN / IS NULL@jmacinnes가 그의 대답에 가지고 있는 버전.

이것이 당신이 필요로 하는 것입니까?

select ct.* from
completedTasks ct
left outer join plannedTasks pt on ct.taskId = pt.TaskId and ct.userId = pt.userId
where pt.taskId is null

그러나 질문에서 상태 열이 두 개의 테이블보다 더 나은 스키마로 들린다는 점을 감안할 때 저는 의견에 동의합니다.

@ypercube ᴹ 아래 언급 쿼리를 공유해 주셔서 감사합니다.

SELECT * FROM CompletedTasks WHERE (userID, taskID) NOT IN
      ( SELECT userID, taskID FROM PlannedTasks) ;'

제 문제는 해결되었습니다.

첫 번째 답변은 꽤 괜찮았습니다. 저에게는 효과가 있었고, 계획된 작업 후 ""가 누락되었습니다.한 테이블에서 다른 테이블에 있던 요소들을 제거해야 해요, 그래서...

SELECT *
FROM CompletedTasks
WHERE (userID, taskID) NOT IN
      ( SELECT userID, taskID
        FROM PlannedTasks )
      ) ;

내 코드는 다음과 같습니다.

$query_C_Ranking = sprintf("SELECT * 
                                FROM tblpinturas
                                WHERE (idCode) NOT IN 
                                        (SELECT idCode FROM tblranking)
                                ");

언급URL : https://stackoverflow.com/questions/8435107/mysql-where-not-in-using-two-columns

반응형