匹配由SQL WHERE IN CLAUSE生成的结果

克里斯蒂娜

让我们看看我有一个简单的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在这种情况下可能会有所帮助。

卢卡斯·索佐达(Lukasz Szozda)

听说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中使用。fieldMySQL具体的。

怎么运行的:

  1. 使用需要检查和排序列的值创建派生表/子查询
  2. JOIN 将仅返回基于名称彼此对应的行
  3. ORDER BY 您在子查询中添加的列

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章