从两个表中选择不存在的地方

时间:2014-05-28 15:42:56

标签: php sql database

我有两张桌子:

表1

id       int(11)
name     varchar(255)
email    varchar(255)

表2

id       int(11)
name     varchar(255)
email    varchar(255)

两者都有几千个条目。问题是它们需要相同而且表2有一些缺失。

如何检查表1中的哪些电子邮件不在表2中,然后将其输出到页面?

我试过了:

$result = mysqli_query($con,"SELECT email
                             FROM table2 b
                             WHERE NOT EXISTS (
                             SELECT *
                             FROM table1 a
                             WHERE a.email = b.email)");

但是当我得到var_dump $ result时它会返回Null。

3 个答案:

答案 0 :(得分:2)

你倒退了。您拥有的查询将为您提供table2中不在table1内的记录。

你想:

SELECT email
FROM table1 a
WHERE NOT EXISTS (
    SELECT 1
    FROM table2 b
    WHERE b.email = a.email
)

即。 "从table1中选择电子邮件,其中表2中没有"

答案 1 :(得分:0)

试试这个:

SELECT email FROM Table1 a WHERE email not in(select email from table2 WHERE not email is null)

答案 2 :(得分:0)

如果可能的话,我更愿意避免嵌套选择:

SELECT a.email
FROM table1 AS a
LEFT JOIN table2 AS b
ON a.email = b.email
WHERE b.email IS NULL

应该找到table1中存在的任何电子邮件地址,但不是 table2。

如果您需要将该输出转储到屏幕,而不是var_dump结果(因为结果将是mysqli_result对象),您可以:

$result = mysqli_query($con, "SELECT a.email FROM table1 AS a LEFT JOIN table2 AS b ON a.email = b.email WHERE b.email IS NULL");

if($result) {
  var_dump($result->fetch_all());
}
else {
  echo $con->error();
}