不使用表连接和子查询如何筛选匹配table1 ID的table2全量信息
实现方案
核心前提利用
Table2所有非ID列取值完全一致,不需要关联匹配即可直接复用全局唯一的非ID列值。
实现逻辑
- 用标准SQL的集合差集运算
EXCEPT直接取出Table1存在、Table2不存在的ID,避免使用表连接或子查询做存在性判断 - 直接通过聚合函数取Table2非ID列的全局唯一值(所有行值相同,MAX/MIN运算结果和原值完全一致),补全返回需要的全部列
可执行SQL语句
通用兼容写法(仅含极简单标量子查询,无表连接无嵌套业务子查询)
SELECT id, -- 其他非ID列均按照 MAX(列名) 的格式补充即可 (SELECT MAX(account_name) FROM Table2) AS account_name FROM Table1 EXCEPT SELECT id, (SELECT MAX(account_name) FROM Table2) AS account_name FROM Table2
完全无任何子查询写法
提前执行一次查询获取Table2非ID列的固定值(因为所有行取值一致,只需查询任意一行即可),直接作为常量写入查询语句:
-- 示例为提前查询到account_name固定为'ABC'的场景 SELECT id, 'ABC' AS account_name FROM Table1 EXCEPT SELECT id, 'ABC' AS account_name FROM Table2
结果验证
针对示例数据,两种写法返回的结果均为ID为3、8,account_name为ABC的两条记录,完全匹配期望输出。
内容的提问来源于stack exchange,提问作者Neko Novice
相关产品推荐
相关产品推荐

