반응형
두 개의 열을 사용하는 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
반응형
'programing' 카테고리의 다른 글
AJAX를 사용하여 양식 파일을 보내는 중 오류 발생 (0) | 2023.07.24 |
---|---|
데이터베이스 정렬을 변경한 후 단순 쿼리가 작동하지 않음 (0) | 2023.07.24 |
데이터베이스 설계 - 날짜를 기본 키의 일부로 사용해야 합니다. (0) | 2023.07.24 |
정적 방법의 목적은 무엇입니까?언제 사용해야 하는지 어떻게 알 수 있습니까? (0) | 2023.07.24 |
PHP Mailer의 "SMTP 오류: 인증할 수 없음" (0) | 2023.07.24 |