mySQL 查询复杂的连接产生随机和错误的数字


mySQL query complicated join producing random and erroneous number

下面的代码应该找到没有邮寄投票的选民,有电话号码没有某些代码列在另一个称为投票意向的表格中,具有某些承诺或根本没有在该表中列出。

FROM electors,voting_intention 
WHERE
  electors.telephone > 0 
  AND electors.postal_vote != 1 
  AND (
    electors.mosaic NOT IN ('E1','E2','E3') 
    OR (
      electors.ID = voting_intention.elector 
      AND voting_intention.pledge IN ('U','W','X')
    ) 
    OR electors.ID != voting_intention.elector
  )

目前,它产生的记录数超过200万条,是数据库中数量的许多倍。显然有些不对劲,但我看不到我的错误。

FROM electors e
        LEFT JOIN voting_intention v1 ON e.ID = v1.elector AND v1.pledge IN ('U','W','X') 
        LEFT JOIN voting_intention v2 ON e.ID = v2.elector
WHERE 
    e.telephone > 0 
AND e.postal_vote != 1 /* do not have a postal vote?? */
AND (e.mosaic NOT IN ('E1','E2','E3') 
     OR v1.elector IS NOT NULL
     OR v2.elector IS NULL)

看起来你缺少选民和voting_intention之间连接的定义

我希望看到类似的东西:

FROM electors e 
INNER JOIN voting_intention v 
    ON v.elector_id = e.id

显然,每个表的键都替换为正确的键。