让我们看一下这样的简单table
:
name id
tom 1
jerry 2
... ...
从外面,我得到一个包含名字的名单(tom,jerry,kettie ......)
我正在尝试使用WHERE IN
子句根据名称列表检索id。
我能做到
SELECT id FROM mySimpleTable where name in ('tom','jerry','kettie');
所以只需迭代name list
并在括号中生成内容。
这样可行,但结果不在输入顺序中,例如,输入为tom, jerry, kettie
,预期结果为1,2,3
,但输出实际上可以是任何顺序。
然后我如何修改SQL clause
以确保我的输入和输出匹配,以便我可以相应地执行以下过程。我听说JOIN
在这种情况下可能有帮助。
答案 0 :(得分:3)
SELECT id
FROM mySimpleTable
where name in ('tom','jerry','kettie')
order by field(name, 'tom','jerry','kettie')
答案 1 :(得分:1)
我听说JOIN在这种情况下可能会有所帮助。
是的,它可以提供帮助:
SELECT m.id
FROM mySimpleTable m
JOIN (
SELECT 'tom' AS name, 1 AS orderNum
UNION ALL
SELECT 'jerry' AS name, 2 AS orderNum
UNION ALL
SELECT 'kettie' AS name, 3 AS orderNum
) AS sub
ON m.name = sub.name
ORDER BY sub.orderNum ASC;
的 SqlFiddleDemo
强>
此解决方案也可用于不同的RDBMS。 field
具体为MySQL
。
工作原理:
JOIN
将仅返回基于名称ORDER BY
列答案 2 :(得分:1)
只是select id,name from table_a where name in ('tom','jerry','happy')
,您将拥有输入名称和输出ID的组合。
答案 3 :(得分:0)
这完全取决于您获取“in”子句列表的位置。
如果它来自外部的某个地方,您可能应首先将列表转换为临时表,添加一个指示顺序的id列(请参阅this回答以了解如何执行此操作) - 以及然后用它做一个内部联接。
答案 4 :(得分:0)
我确实尝试运行你的SQL查询,而我确实以与输入相同的顺序获得了结果输出。好吧,但仍然没有必要每次都以相同的方式发生,因此在特定层次结构中排列输出的最佳方法是使用ORDER BY子句。语法如下:
SELECT column_name
FROM table_name
WHERE conditions
ORDER BY column_name;
因此,在您的情况下,查询将显示为:
SELECT id
FROM mysimpletable
WHERE name
IN('tom','jerry','kettie'....)
ORDER BY id;
您可以get more help with MySQL concepts在此处获取更多信息。
答案 5 :(得分:-2)
选择 ID 来自mySimpleTable 其中的名字(' tom',' jerry',' kettie') 按ID排序