let data = await Category.findAll({
where: { list_category_id: body.category_id },
attributes: {
include: [
[
sequelize.literal(`COALESCE (
CASE WHEN youtube_id_id IS NOT NULL THEN ROW_NUMBER() OVER (ORDER BY random(), youtube_id_id) END,
CASE WHEN instagram_id_id IS NOT NULL THEN ROW_NUMBER() OVER (ORDER BY random(), instagram_id_id) END )`),
"row_num",
],
],
},
order: [sequelize.literal("row_num")],
});
在一行中,只有一个具有 youtube_id_id 或 instagram_id_id 值,我想出了这个,以便我每次都可以获取包含 youtube_id_id 和 instagram_id_id 列值的行,但这仅在 ORDER BY 中没有 random() 的情况下才有效。我希望每次运行此命令时都能获得随机结果,同时确保具有这两个值的行都存在。我怎样才能做到这一点?
我希望每次运行此命令时都能获得随机结果,同时确保同时存在具有这两个值的行。
您可以进行两个查询并
union
它们。
select *
from your_table
where youtube_id is null
and instagram_id is not null
order by random()
limit 1
union
select *
from your_table
where youtube_id is not null
and instagram_id is null
order by random()
limit 1