Mysql查询和重新排序结果

Mysql查询和重新排序结果,mysql,sql,sql-order-by,where-in,Mysql,Sql,Sql Order By,Where In,我的SQL查询是这样的 SELECT `product_code`, `test` FROM `table_products` WHERE `product_code` IN ('38986', '222098', '1113426', '3645651', ...) 我希望结果按查询中显示的产品代码顺序排序,并且当表中的产品代码不匹配时,我希望在SQL结果中添加一个空行。除了将值表示为行之外,可能没有其他方法: SELECT codelist.code, table_products.wha

我的SQL查询是这样的

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

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

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

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

如果没有匹配项,左连接将为您提供代码号和空的右侧行。ORDER BY sort将按所需顺序对产品进行排序。

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

乙二醇


当表中的产品代码不匹配时,我想在sql结果中添加一个空行。为什么?我假设您的意思是,如果产品代码222098实际上不存在,您希望在结果集中返回一个空行!对吗?我需要导出数据并匹配到csv文件
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;