簡體   English   中英

我將如何執行以下SQL搜索?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM