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

  • 选民
  • 家庭

  • 他们加入voters.household_idhousehold.id

    现在,我需要做的就是在表决表与voter.idelimination.voter_id联接到名为消除的第三个表的地方进行修改。但是要注意的是,我要排除选民表中在 knockout 中具有相应记录的所有记录。

    如何制作查询来做到这一点?

    这是我当前的查询:
    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,即使不匹配也会返回行,然后可以通过检查NULL来仅选择不匹配的行。

    因此,类似:

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

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

    10-07 17:06