通过IN子句从mysql命令获得结果

时间:2010-06-15 13:43:16

标签: mysql sql-order-by

我有以下查询

SELECT * FROM invoice WHERE invoice_id IN (13, 15, 9, 27)

我的结果是:

invoice_id | invoice_number | ...
------------------------------------
9          | 201006003      |
13         | 201006020      |
15         | 201006022      |
27         | 201006035      |

这是我想要的结果集,除了由invoice_id(这是一个自动增量值)排序。

现在我希望结果按照我在查询中指定的顺序(13,15,...)。有办法实现吗?

背景是我有一个绑定到DataGridView的DataTable。用户可以对结果进行过滤和排序,但如果他想要打印结果,我不会使用DataTable进行打印,因为它只包含最重要的列,而是从数据库中提取整个记录并将其传递给我的打印控件

我还尝试使用缺少的结果扩展现有的DataTable,但这似乎比使用IN(...)查询要慢。

2 个答案:

答案 0 :(得分:3)

这很难看,但你可以做到:

ORDER BY CASE invoice_id WHEN 13 THEN 0 WHEN 15 THEN 1 WHEN 9 THEN 2 WHEN 27 THEN 3 ELSE 4 END

实际上,有FIELD函数:

ORDER BY FIELD(invoice_id, 13, 15, 9, 27)

FIELD function返回其余列表中第一个参数的位置。

或者,如果你动态生成它,你可以这样做:

WHERE invoice_id IN ({list}) ORDER BY FIND_IN_SET(invoice_id, '{list}')

答案 1 :(得分:3)

您希望FIELD按参数排序。

SELECT * FROM invoice WHERE invoice_id IN (13, 15, 9, 27) ORDER BY FIELD (invoice_id, 13, 15, 9, 27)