我有两张桌子:
表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。
答案 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();
}