select product_name,price
from marketing_table
where price >=5000 /*user supplied filter*/
and price <=10000 /*user supplied filter*/
union all
select m.product_name,m.price
from marketing_table m
where not exists (select *
from marketing_table m1
where m1.price >=5000 /*user supplied filter*/
and m1.price <=10000 /*user supplied filter*/
)
SELECT *
FROM (
SELECT 0 priority, t.*
FROM first_table t
UNION ALL
SELECT 1 priority, t.*
FROM second_table t
LEFT JOIN (SELECT ... FROM first_table) a
WHERE a.id IS NULL
)
ORDER BY priority
LIMIT 20
3条答案
按热度按时间jv4diomz1#
您可以尝试使用union all查询,如下所示。
axzmvihb2#
我从你的评论中了解到,你可以先尝试这样简单的方法:
这是我能想到的最简单的方法,它可以作为你的一个起点。
下面是一个演示:https://www.db-fiddle.com/f/31jrr27dfjqyqqigzbqlcs/2
如果这不是您想要的,您必须编辑您的问题,并插入一些具有预期输出的示例数据。你当前的问题往往被标记为过于宽泛,需要重点/清晰。
tuwxkamq3#
您尝试过使用带限制的联合子查询吗?
如果不希望在第一个\u表返回时包含任何第二个\u表记录,则需要对第二个查询执行子查询以确认不存在任何行。
我认为,如果您使用的是mysql 8中的公共表表达式(commontableexpressions,cte)功能,那么就有可能使用该版本。
https://dev.mysql.com/doc/refman/8.0/en/with.html