gpt4 book ai didi

php - MySQL 仅返回其他表中不存在的列的行

转载 作者:行者123 更新时间:2023-11-29 08:10:57 27 4
gpt4 key购买 nike

MySQL 表:

Table Name: basicdetails
id,firstname,lastname,hometown
1,bob,dylan,somewhere
2,judge,judy,somewhere

Table Name: fulldetails
id,firstname,lastname,age,gender,eyes,hometown
1,bob,dylan,51,m,blue,somewhere
2,bob,dylan,22,m,green,somewhereelse
3,judge,judy,19,f,blue,somewhere
4,judge,judy,62,f,blue,somewherenicer
5,bob,dylan,31,m,blue,somewhere

预期结果是仅根据名字、姓氏和家乡返回完整详细信息中未包含在基本详细信息中的条目。

在这种情况下,它将是:

bob,dylan,somewhereelse
judge,judy,somewherenicer

与编写 MySQL 查询相比,我更擅长 PHP,因此我所有的尝试都是关于创建唯一的数组并尝试对它们进行排序。它非常复杂而且非常慢,所以我想也许有可能仅根据它们的(名字,姓氏,家乡)来获取两者都不存在的条目。是否有一种特定的方法可以使用 MySQL(或 MySQLi,如果有区别的话)返回两个表中同时不存在的唯一值?

我对这方面的措辞表示歉意,我无法正确措辞。

最佳答案

反连接是一种熟悉的模式。

您已经知道如何查找具有匹配项的行:

SELECT a.*
FROM a
JOIN b
ON a.firstname = b.firstname
AND a.lastname = b.lastname
AND a.hometowm = b.hometown

要获取不匹配的行集,我们可以使用 OUTER 连接(以便返回 a 中的所有行)以及 b 中的匹配行。

SELECT a.*
FROM a
LEFT
JOIN b
ON a.firstname = b.firstname
AND a.lastname = b.lastname
AND a.hometowm = b.hometown

现在的“技巧”是过滤掉所有匹配的行。我们可以通过添加 WHERE 子句(一个测试是否找到匹配项的谓词)来做到这一点。执行此操作的一种便捷方法是测试 b 中的列是否为 NULL,如果找到匹配项,我们知道 b 中的列将为 NULL:

SELECT a.*
FROM a
LEFT
JOIN b
ON a.firstname = b.firstname
AND a.lastname = b.lastname
AND a.hometowm = b.hometown
WHERE b.firstname IS NULL

关于php - MySQL 仅返回其他表中不存在的列的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21643066/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com