mysql - LEFT JOIN 显示 NULL 行 + WHERE
问题描述
我有两张表,一张包含唯一名称(bill_datatypes),另一张表示这些名称连接到某些子类别(一个名称也可以连接到更多类别)。
我想选择所有尚未连接到特定子类别的名称。这意味着名称可能在连接表中被提及,但连接到不同的子类别。
我已经用以下子查询解决了这个问题:
SELECT T1.name
FROM bill_datatype T1
WHERE NOT EXISTS (
SELECT T2.bill_datatype_id
FROM obligatory_field T2
WHERE T2.bill_datatype_id = T1.id AND T2.bill_sub_category_id = 1
)
这个解决方案似乎运作良好,但这样我就不能从第二个表中获得任何数据,这在未来可能需要。
您对如何使用 LEFT JOIN 解决问题有什么建议吗?(子类别上的 WHERE 子句对我来说太具有挑战性了。)
也提前感谢您的帮助!
解决方案
根据我对您问题的理解,我认为此查询将实现您想要的:
SELECT T1.name
FROM bill_datatype T1
LEFT JOIN obligatory_field T2
ON T2.bill_datatype_id = T1.id AND T2.bill_sub_category_id = 1
WHERE T2.bill_datatype_id IS NULL
表中的WHERE
条件JOIN'ed
只会为您T1
提供没有bill_sub_category_id
或它们bill_sub_category_id
不是 1 的名称。
推荐阅读
- go - Golang VSCode 配置最佳设置
- java - ClickListener touchDragged pointer always zero
- facebook - Expo React Native Simulator 错误:Facebook SDK 尚未初始化
- ios - 使用未声明类型的 UIUserActivity
- flutter - 需要在 TabBarView 中展开,但高度错误
- node.js - Angular 构建 - 未找到模块:错误:无法解析“控制台”
- typescript - 如何使用 TS 覆盖全局变量定义
- npm - 使用 Ansible npm 包安装 Angular
- azure-cognitive-search - Azure 搜索:Blob 元数据字段值未出现在索引数据中
- python - 如何使用异步循环遍历列表并调用列表对象自己的函数