【发布时间】:2021-01-26 00:18:53
【问题描述】:
我在过滤较长查询的结果时遇到了一些问题。
假设我们有三列,有一些样本行:
# column_1, column_2, column_3
'value 1', 'value 2', null
'value 1', 'value 2', '2'
'value 2', 'value 2', null
我想选择所有行,但不包括 column_3 为空且其 column_1、column_2 值与至少一个非空 column_3 值相关联的行。
一个痛点是我被 MySQL 5.7 困住了,这些行是由一个相当长的文本子查询产生的。如果我有 CTE,我可以做到:
WITH
cte1 AS (...)
SELECT *
FROM cte1 as a
WHERE
column_3 IS NOT NULL
OR NOT EXISTS (
SELECT 1
FROM cte1 as b
WHERE
b.column_1 = a.column_1
AND b.column_2 = a.column_2
AND b.column_3 IS NOT NULL
)
鉴于我无权访问 CTE,有什么方法可以在不复制粘贴大型子查询的情况下做到这一点?
【问题讨论】:
-
我建议你结束折磨并升级到 MySQL 8.0。
-
我正在学习 MySQL 8 和 Postgres 13,但对于这个特殊的东西,这不是我的选择。
标签: mysql common-table-expression