[英]How would I perform the following SQL search?
假設以下架構
user_id, tournament_id, round
我將如何執行搜索以在Tournament_id = 26,回合= 8中找到用戶,而在Tournament_id = 26,回合= 7中找不到用戶,即
用戶有1行對應的tour_id = 26,回合= 8
比賽ID為26,回合為7的零行
我試着做
where user_id not in (select ... where tournament_id=26 and round=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
在SQL Server中,可以使用CTE代替中間表:
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
工作示例:
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
我假設您也有一個用戶表?
嘗試這個:
select * from users u
join tournament t on t.user_id = u.id
where t.tournament_id=26 and t.round=8
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.