php - 要从查询列表中删除的 Mysql 连接类型

标签 php mysql sql

我有 3 个三表:aaLocaleaCompany

如果 aCompany.parentID 不存在,我需要获取 a.id = aLocale.parentID 的所有行。

我知道 aLocale 是一个 innerJoin,但是 aCompany 呢?

我也可能错误地看待这个问题。我使用 aCompany 的唯一原因是匹配的行不存在。目前,我正在运行 a 查询并以数组形式获取结果。然后,我迭代该数组并取消设置与 aCompany 的单独查询匹配的项目。我觉得有一种更好的方法可以通过 1 个查询来完成此操作。

最佳答案

您可以使用 LEFT JOIN 而不是 INNER JOIN,这甚至会返回不匹配的值

SELECT * FROM a INNER JOIN aLocale ON a.id = alocale.parentID 
LEFT JOIN aCompany ON aCompany.parentID = alocale.parentID 
WHERE aCompany.parentID IS NULL

编辑: 您还可以在您的选择中使用coalesce()而不是*来获取parentID不为空

SELECT COALESCE(aCompany.parentID, aLocale.parentID) AS parentID FROM ....

使用coalesce(),你会在参数列表中找到第一个非空值

关于php - 要从查询列表中删除的 Mysql 连接类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22332398/

相关文章:

php - 当我的页面加载时,它显示上一个 mysql 查询结果而不是当前的结果

mysql - 更新mysql中的日期

java - 如何通过 Payara5 在 Web 应用程序上显示数据库触发错误

php - __PHP_Incomplete_Class 类的 OOP 对象

sql - 有没有办法在 Qlik Sense 中对标签进行分组?

sql - 在 SAS 中查找与最大值关联的 ID

php - 插件在激活期间生成了意外输出的 xxx 个字符

php - 需要创建一个也可以在互联网和本地互联网上运行的应用程序

php - 如何通过未按约定命名的字段关联 CakePHP 中的模型?

mysql - JPQL 中有 CONCAT_WS 方法吗?