Join

如何加入兩個表以獲取第二個表中的缺失行

  • November 8, 2017

在一個簡單的投票系統中

CREATE TABLE elections (
election_id int(11) NOT NULL AUTO_INCREMENT,
title varchar(255),

CREATE TABLE votes (
election_id int(11),
user_id int(11),
FOREIGN KEYs

為了獲取使用者投票的選舉列表,使用以下 JOIN

SELECT * FROM elections
JOIN votes USING(election_id)
WHERE votes.user_id='x'

但是如何獲取使用者未投票的選舉列表?

使用您現有的查詢來獲得與您想要的列表相反的結果。然後可以通過 NOT IN 檢查該列表以獲得所需的列表。

SELECT * FROM elections WHERE election_id NOT IN (
   SELECT elections.election_id from elections
   JOIN votes USING(election_id)
   WHERE votes.user_id='x'
)

使用外連接:

select e.election_id, e.title, v.user_id
from Elections e
LEFT OUTER JOIN votes v ON v.election_id = e.election_id and v.user_id = @userid

如果沒有為特定選舉投票,則 UserId 將為空,否則將顯示

如果您只想列出沒有任何投票的選舉,您可以這樣做:

select *
from elections e
where election_id NOT IN 
(select election_id
 from votes
 where user_id = @userid
)

引用自:https://dba.stackexchange.com/questions/39344