显示数据库中JOIN子句中的所有记录

时间:2016-02-24 12:44:21

标签: php mysql join

我有两个名为'FORMAT Range("12:12").Insert Range("C7").Copy Range("C12:I12").PasteSpecial Range("C12:I12").ClearContents 'DATE Range("C7").Copy Range("C12").PasteSpecial Range("C12").NumberFormat = "m/d/yyyy" 'ARRIVAL Range("C7").Copy Range("D12").PasteSpecial Range("D12").NumberFormat = "[$-F400]h:mm:ss AM/PM" 'DEPARTURE Range("C9").Copy Range("E12").PasteSpecial Range("E12").NumberFormat = "[$-F400]h:mm:ss AM/PM" 'CALCULATE Range("E12").Copy Range("F12").PasteSpecial Range("F12") = Range("E12").Value - Range("D12").Value Range("C12:I12").Font.Size = 12 voter的表。 log_vote包含选民的数据,而Voter包含已投票的选民的数据。

现在我试图向那些没有投票的选民显示。我已尝试在两个表中使用JOIN,但它会失败,因为JOIN子句只显示当然投票的选民。

这是我尝试过的代码段:

log_vote

如何只展示没有投票的选民?使用JOIN正确的方法吗?在此先感谢,我真的很感激你的答案!

*注意:我使用的是PHP技术。想知道PHP是否可以解决我的问题。

4 个答案:

答案 0 :(得分:1)

我认为最直接的方法是not exists

select v.*
from voter v
where not exists (select 1 from log_vote lv where lv.nim = v.nim);

如果您想使用join,则相应的版本为left join

select v.*
from voter v left join
     log_vote lv
     on lv.nim = v.nim
where lv.nim is null;

答案 1 :(得分:1)

这可以通过LEFT JOIN来完成,这样连接条件就不会过滤那些不回答它的人,然后你过滤掉那些没有匹配的人:

SELECT voter.* FROM voter
LEFT JOIN log_vote ON log_vote.nim = voter.nim
WHERE log_vote.nim is null

答案 2 :(得分:1)

你也可以这样做..

SELECT * FROM voter LEFT JOIN log_vote ON log_vote.nim = voter.nim 
WHERE log_vote.nim IS NULL

答案 3 :(得分:1)

你可以使用

  

不在

这段代码应该有效!

  

SELECT * FROM voter v WHERE v.nim NOT IN(SELECT lv.nim FROM log_vote lv)

你应该提供关于每个表的属性的更多信息你确定它们在每个表中都有nim属性吗?