user_id, tournament_id, round
가 어떻게 8 = 라운드 tournament_id = (26)의 사용자를 찾기 위해 검색을 수행하지만 것이다 다음 스키마를 가정하지 라운드 tournament_id = 26 일에서 = 7 즉
사용자가 하나 개의 행이 있습니다 라운드 tournament_id = 26 일 대한 tournament_id = 26 라운드 = 8 개
제로 행 = 내가 해봤
7
을하고매우 느립니다.
user_id, tournament_id, round
가 어떻게 8 = 라운드 tournament_id = (26)의 사용자를 찾기 위해 검색을 수행하지만 것이다 다음 스키마를 가정하지 라운드 tournament_id = 26 일에서 = 7 즉
사용자가 하나 개의 행이 있습니다 라운드 tournament_id = 26 일 대한 tournament_id = 26 라운드 = 8 개
제로 행 = 내가 해봤
7
을하고매우 느립니다.
SELECT user_id
FROM tournaments
WHERE tournament_id = 26
AND [round] = 8
EXCEPT
SELECT user_id
FROM tournaments
WHERE tournament_id = 26
AND [round] = 7
또는 중간 테이블 사용 :
SELECT user_id, [round]
INTO tournament26
FROM tournaments
WHERE torunament_id = 26;
SELECT user_id
FROM tournament26
WHERE [round] = 8
EXCEPT
SELECT user_id
FROM tournament26
WHERE [round] = 7
것은 당신이 CTE를 사용하는 대신 수있는 SQL 서버에서를 중간 테이블 :
WITH tournament26 AS (
SELECT user_id, [round]
FROM tournaments
WHERE tournament_id = 26
)
SELECT user_id
FROM tournament26
WHERE [round] = 8
EXCEPT
SELECT user_id
FROM tournament26
WHERE [round] = 7
사용자 테이블이 있다고 가정합니까?
이 시도 :
select * from users u
join tournament t on t.user_id = u.id
where t.tournament_id=26 and t.round=8
작동 예 :
CREATE TABLE #t
(
[user_id] INT,
tournament_id INT,
[round] INT
)
INSERT INTO #t
SELECT 1, 26, 8
UNION SELECT 1, 26, 7
UNION SELECT 2, 26, 7
UNION SELECT 3, 26, 7
UNION SELECT 4, 26, 8
UNION SELECT 4, 25, 8
UNION SELECT 4, 25, 7
SELECT user_id, tournament_id, MAX(round), COUNT(1)
FROM #t
WHERE tournament_id=26
GROUP BY user_id, tournament_id
HAVING COUNT(1) = 1 AND MAX(round) = 8
몇 가지 : 이것은 유일한 테이블입니까? 정확한 쿼리는 무엇입니까? 인덱스를 추가 했습니까? – rdvdijk
정확하게 당신이 찾고있는 것이 명확하지 않습니다. 26,8 조합이있는 테이블의 행이나 토너먼트 26의 유일한 조합이 8 인 행을 찾고있는 것처럼 해석 될 수 있습니다. 즉, 해당 조합에 대한 항목이 필요하고 행이 없어야한다는 것을 의미합니다 26, <무엇이든 8>. – cairnz