我有一個包含兩個表的資料庫。
Table Players Table Wins
ID Name ID Player_won
1 Mick 1 2
2 Frank 2 1
3 Sarah 3 4
4 Eva 4 5
5 Joe 5 1
我需要一個顯示“沒有贏得任何比賽的玩家”的 SQL 查詢。我試過了,但我什至不知道如何開始。謝謝
uj5u.com熱心網友回復:
您需要其中players沒有相應行的所有行wins。為此,您需要一個左連接,過濾不連接的行:
select
p.id,
p.name
from Players p
left join Wins w on w.Player_won = p.id
where w.Player_won is null
您還可以使用not in:
select
id,
name
from Players
where id not in (select Player_won from Wins)
uj5u.com熱心網友回復:
MINUS集合運算子呢?
樣本資料:
SQL> with players (id, name) as
2 (select 1, 'Mick' from dual union all
3 select 2, 'Ffrank' from dual union all
4 select 3, 'Sarah' from dual union all
5 select 4, 'Eva' from dual union all
6 select 5, 'Joe' from dual
7 ),
8 wins (id, player_won) as
9 (select 1, 2 from dual union all
10 select 2, 1 from dual union all
11 select 3, 4 from dual union all
12 select 4, 5 from dual union all
13 select 5, 1 from dual
14 )
查詢從這里開始:
15 select id from players
16 minus
17 select player_won from wins;
ID
----------
3
SQL>
所以,是的……玩家 3 到目前為止沒有贏得任何比賽。
uj5u.com熱心網友回復:
我認為你下次應該提供你的嘗試,但你去:
select p.name
from players p
where not exists (select * from wins w where p.id = w.player_won);
MINUS這里不是最好的選擇,因為不使用索引而是對兩個表執行全掃描。
uj5u.com熱心網友回復:
我有一個包含兩個表的資料庫。
您沒有顯示表格的名稱或任何定義,讓我對它們的結構進行有根據的猜測。
我試過了,但我什至不知道如何開始。
你到底嘗試了什么?您可能在這里缺少的是LEFT OUTER JOIN的概念。
假設表名為player_tableand wins_table,并且列名與您顯示的完全相同,并且該player_won列旨在表示該行 ID 的玩家贏得的游戲數,并且不知道是否wins_table會有零玩家的行贏了……這應該涵蓋它:
select Name
from players_table pt
left join wins_table wt on (pt.ID = wt.ID)
-- Either this player is explicitly specified to have Player_won=0
-- or there is no row for this player ID in the wins table
-- (but excluding the possibility of an explicit NULL value, since its meaning would be unclear)
where Player_won = 0 or wt.ID is null;
uj5u.com熱心網友回復:
從您得到的各種答案中可以看出,有很多方法可以實作這一點。
另一種方法是在相關子查詢中使用 COUNT,如下所示:
SELECT *
FROM PLAYERS p
WHERE 0 = (SELECT COUNT(*)
FROM WINS w
WHERE w.PLAYER_WON = p.ID)
db<>在這里擺弄
uj5u.com熱心網友回復:
SELECT *
FROM Players p
INNER JOIN Wins w
ON p.ID = w.ID
WHERE w.players_won = 0
我有一段時間沒有做 SQL,但我認為如果您正在尋找 0 勝的玩家,這可能是正確的
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/486115.html
下一篇:如何在Oracle中撰寫一個簡單的查詢或PL/SQL代碼來檢查order_id是否存在于一個表中,然后再處理另一個表?
