一尘不染

MySQL联接不存在的地方

mysql

我有一个连接两个表的MySQL查询

  • 选民
  • 住户

他们加入voters.household_idhousehold.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

阅读 241

收藏
2020-05-17

共1个答案

一尘不染

我可能会使用LEFT JOIN,即使没有匹配项也会返回行,然后可以通过检查NULLs 仅选择不匹配的行。

因此,类似:

SELECT V.*
FROM voter V LEFT JOIN elimination E ON V.id = E.voter_id
WHERE E.voter_id IS NULL

与使用子查询相比,效率更高还是更低,取决于优化,索引,每个选民是否有多个消除对象等。

2020-05-17