table A
id value
1 a
2 b
3 c
我有上面的表格。
和我的 SQL 查询
'从 A 中选择 * 作为按字段 (a.id, 1,3,2,3,3,1( 顺序 a.id
结果是
id value
1 a
3 c
2 b
但我想选择
id value
1 a
3 c
2 b
3 c
3 c
1 a
喜欢这个。。
我该怎么做?
您可以将表与派生表联接,派生表包含要选择的id
列表和序列,如下所示:
SELECT a.*
FROM tableA a
INNER JOIN (
SELECT 1 seq, 1 id
UNION ALL SELECT 2, 3
UNION ALL SELECT 3, 2
UNION ALL SELECT 4, 3
UNION ALL SELECT 5, 3
UNION ALL SELECT 6, 1
) x ON x.id = a.id
ORDER BY x.seq
使用此解决方案,您可以根据需要进行排序,而无需在结果集中实际显示排序列。
在不使用动态 SQL 的情况下,最接近您想要的内容是联合查询:
SELECT id, value, 1 AS pos FROM A WHERE id = 1 UNION ALL
SELECT id, value, 2 FROM A WHERE id = 3 UNION ALL
SELECT id, value, 3 FROM A WHERE id = 2 UNION ALL
SELECT id, value, 4 FROM A WHERE id = 3 UNION ALL
SELECT id, value, 5 FROM A WHERE id = 3 UNION ALL
SELECT id, value, 6 FROM A WHERE id = 1
ORDER BY pos;
注意:您不需要子查询来生成所需的顺序。
我怀疑您正在寻找一种方法来根据表中包含的状态在结果集中生成一定数量的记录。 SQL是一种声明性语言,并不擅长创建新数据。 您的业务应用程序通常是这样做的。 因此,出现上述联合查询的冗长是因为 SQL 在生成数据时没有明确表达。
您可以在此处使用"OR"运算符进行查询。它将为您提供 id 值为 1 或 2 或 3 的所有结果。
因此,这是您的选择,如下所示。
从 A 中选择 *,其中 id=1 或 id=2 或 id=3 按 id 排序