WITH t as (
SELECT *
FROM scd p
WHERE p.modified_date > FROM_UNIXTIME(1593060230)
AND ( p.main_id = 1
OR FIND_IN_SET(1, p.mult_ids) <> 0 )
ORDER BY modified_date DESC
LIMIT 2 OFFSET 0
),
del as (
SELECT
*
FROM t WHERE (status <> 1 AND status <> 2)
),
w_del as (
SELECT
*
FROM t WHERE (status = 1 OR status = 2)
)
SELECT w_del.*, del.* FROM w_del,del;
如何使用普通子查询实现这一点。我使用的是MySQL5.7,不能使用ctes。如果我使用联合/子查询,则无法重用表错误。有没有一种方法可以在没有临时表的情况下实现这一点?
请帮忙。
1条答案
按热度按时间erhoui1w1#
您只需为每个别名插入代码。继续这样做,直到你在基表上:
不过,有一个关键点:定义
t
正在使用ORDER BY
以及LIMIT
. 如果有领带modified_date
列,则两个子查询可以返回不同的结果集。您有两种选择来避免出现问题:将其他键添加到
ORDER BY
以确保排序是稳定的(即每次返回相同的结果,因为键的组合是唯一的)。使用临时表具体化子查询。