我有一个连接两个表的MySQL查询
他们加入voters.household_id并household.id。
voters.household_id
household.id
现在,我需要做的是修改它,在投票器表与第三个表称为“消除”的地方,沿着voter.id和相连elimination.voter_id。但是要注意的是,我要排除选民表中在淘汰表中具有相应记录的所有记录。
voter.id
elimination.voter_id
如何制作查询来做到这一点?
这是我当前的查询:
SELECT `voter`.`ID`, `voter`.`Last_Name`, `voter`.`First_Name`, `voter`.`Middle_Name`, `voter`.`Age`, `voter`.`Sex`, `voter`.`Party`, `voter`.`Demo`, `voter`.`PV`, `household`.`Address`, `household`.`City`, `household`.`Zip` FROM (`voter`) JOIN `household` ON `voter`.`House_ID`=`household`.`id` WHERE `CT` = '5' AND `Precnum` = 'CTY3' AND `Last_Name` LIKE '%Cumbee%' AND `First_Name` LIKE '%John%' ORDER BY `Last_Name` ASC LIMIT 30
我可能会使用LEFT JOIN,即使没有匹配项也会返回行,然后可以通过检查NULLs 仅选择不匹配的行。
LEFT JOIN
NULL
因此,类似:
SELECT V.* FROM voter V LEFT JOIN elimination E ON V.id = E.voter_id WHERE E.voter_id IS NULL
与使用子查询相比,效率更高还是更低,取决于优化,索引,每个选民是否有多个消除对象等。