如何在mysql中选择与其他随机结果匹配的结果

h43kikqp  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(265)

我想在一个数据库表中选择所有匹配的结果,其中也包含随机结果,但匹配结果位于顶部。顺便说一下,我现在使用两个查询,第一个是匹配查询,如果计数为零,我现在选择随机结果。我只想用一个查询来完成这个任务。

jv4diomz

jv4diomz1#

您可以尝试使用union all查询,如下所示。

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*/
                   )
axzmvihb

axzmvihb2#

我从你的评论中了解到,你可以先尝试这样简单的方法:

SET @product := 'purse'; -- search term

SELECT * FROM product 
ORDER BY product_name LIKE CONCAT('%',@product,'%') DESC, price ASC;

这是我能想到的最简单的方法,它可以作为你的一个起点。
下面是一个演示:https://www.db-fiddle.com/f/31jrr27dfjqyqqigzbqlcs/2
如果这不是您想要的,您必须编辑您的问题,并插入一些具有预期输出的示例数据。你当前的问题往往被标记为过于宽泛,需要重点/清晰。

tuwxkamq

tuwxkamq3#

您尝试过使用带限制的联合子查询吗?

SELECT *
FROM (
SELECT 0 priority, t.*
FROM first_table t
UNION ALL
SELECT 1 priority, t.*
FROM second_table t
)
ORDER BY priority
LIMIT 20

如果不希望在第一个\u表返回时包含任何第二个\u表记录,则需要对第二个查询执行子查询以确认不存在任何行。

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

我认为,如果您使用的是mysql 8中的公共表表达式(commontableexpressions,cte)功能,那么就有可能使用该版本。
https://dev.mysql.com/doc/refman/8.0/en/with.html

相关问题