MySQL查询和重新排序结果

时间:2019-02-14 14:31:04

标签: mysql sql sql-order-by where-in

我的SQL查询就是这样

SELECT `product_code`, `test`
FROM `table_products`
WHERE `product_code` IN ('38986', '222098', '1113426', '3645651', ...)

我希望结果按照查询中显示的product_code顺序排序,并且当表中该product_code不匹配时,我想在SQL结果中添加一个空行。

2 个答案:

答案 0 :(得分:1)

(可能)没有其他方法,除了将值表示为行:

SELECT codelist.code, table_products.whatever
FROM (
    SELECT 38986 AS code, 1 AS sort UNION ALL
    SELECT 222098,        2         UNION ALL
    SELECT 1113426,       3         UNION ALL
    SELECT 3645651,       4
) AS codelist
LEFT JOIN table_products ON codelist.code = table_products.product_code
ORDER BY codelist.sort

LEFT JOIN将为您提供代码号,如果没有匹配项,则显示右侧空白行。 ORDER BY sort将按所需顺序对产品进行排序。

答案 1 :(得分:0)

您可以在另一个表中使用参考产品代码值,并使用右外部联接

例如)

create table Test(id integer, title varchar(100));
create table ref(idtosee integer);//reference table
insert into ref(idtosee) values(1);
insert into ref(idtosee) values(4);
insert into Test(id, title) values(1, "Hello");
insert into Test(id, title) values(2, "sHello");


select id,title,idtosee from Test right outer join ref on id=idtosee;