작업 (프로그래밍 작업 목록)
TaskID Lang Description
---------------------------------
1 python test1
2 python test2
3 javascript test1
4 python test3
Assig (모든 사용자의 완료된 프로그래밍 작업 목록)
Id TaskId UserName Lang
------------------------------------
1 1 x1 python
2 2 x1 python
3 3 x2 javascript
4 3 x1 python
마지막에 원하는 것은 아래와 같은 테이블을 갖는 것입니다.
결과
TaskID Assig.UserName Lang Completed
1 x1 python YES
2 x2 javascript NO
3 x1 python YES
4 x1 python NO
아래 항목을 시도했지만 표시 할 UserName 을 캡처 할 수 없습니다 . 따라서 일반적으로 문은 다음과 같습니다.
SELECT
taskid, levelskill,
CASE
WHEN EXISTS
(SELECT
taskid
FROM
assig
WHERE tasks.taskid = assig.taskid
AND tasks.lang = assig.lang)
THEN 'TRUE'
ELSE 'FALSE'
END AS Completed
FROM
tasks
WHERE (lang = @lang)
GROUP BY levelskill, taskid
"원하는 결과"는 불가능합니다
결합 된 테이블은 다음과 같습니다.
TaskID Lang Description assig.UserName assig.id completed
1 python test1 x1 1 TRUE
2 python test2 x1 2 TRUE
3 javascript test1 x2 3 TRUE
3 javascript test1 x1 4 TRUE
4 python test3 NULL NULL FALSE
(nb : 작업 4 옆에 사용자 이름을 넣을 수 없습니다. 데이터가 존재하지 않습니다.)
다음 쿼리에서 결과를 얻을 수 있습니다.
SELECT
t.taskid
, t.Lang
, t.Description
, a.username
, CASE a.taskid IS NULL THEN 'FALSE' ELSE 'TRUE' END AS completed
, a.id
FROM tasks t
LEFT JOIN assig a on t.taskid = a.taskid
WHERE lang = @lang
작업에 둘 이상의 사용자 이름이 할당 된 경우 해당 쿼리는 작업중인 각 사용자에 대해 작업을 반복합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다