我有两个选择语句来回答问题“列出正在运行的任何人,如果他们投票,他们不会自己投票”。我得到了为自己投票的所有人和没有参加竞选的所有人。
我当时正在考虑使用Except来连接两个select语句,但是不可能在运行mysql5.0的mysql上使用,并且我正在考虑使用join但不确定如何与内部/外部连接一起使用。
Select Distinct P.First_Name, P.Mid_Name, P.Mid_Name, P.Last_Name
From Person P, Vote V, Candidate C
Where V.Voter_ID = C.Person_ID AND C.Person_ID = P.Person_ID
每个人都在奔跑
Select Distinct P.First_Name, P.Mid_Name, P.Last_Name
From Person P, Vote V, Candidate C
Where V.Voter_ID = V.Candidate_ID AND V.Candidate_ID = C.Person_ID AND C.Person_ID = P.Person_ID
每个为自己投票的人
结果应该是两者之间的差异。
答案 0 :(得分:0)
根据您给定的查询,我认为下面的查询应该有效,
Select Distinct P.First_Name, P.Mid_Name, P.Last_Name
From Person P, Vote V, Candidate C
Where V.Voter_ID != V.Candidate_ID AND V.Candidate_ID = C.Person_ID AND C.Person_ID = P.Person_ID AND V.Voter_ID = C.Person_ID
答案 1 :(得分:0)
使用not exists
过滤那些为自己投票的候选人。
select distinct P.First_Name, P.Mid_Name, P.Mid_Name, P.Last_Name
from Person P
inner join Vote V on V.Voter_ID = C.Person_ID
inner join Candidate C on C.Person_ID = P.Person_ID
where not exists
(select 1 from Person P
inner join Vote V on V.Voter_ID = V.Candidate_ID
inner join Candidate C on V.Candidate_ID = C.Person_ID
where
C.Person_ID = P.Person_ID)