Join
如何加入兩個表以獲取第二個表中的缺失行
在一個簡單的投票系統中
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 )