我有一个数据库,我想同时查询多个值(出于预先的目的)。我想发送一个IN子句并获得匹配行的列表及其等效的IN子句值作为回报。为此我想保留IN-Clause中的顺序
查询模板:
select id
from mytable
where id in (select id from myalias where alias in ('alias a', 'alias b')
and name = 'name 1' or name = 'name 2' ;
我如何知道结果中的哪一行(id)用于'名称1'和'名称2'分别?
这有可能在没有太多喧嚣的情况下实现吗?
结果表:
id | alias
-----------
2 | alias a
1 | alias b
注意:如果在结果表中维护了IN子句顺序,则可以省略别名列
myalias:
id | alias
-------------
1 | alias b
1 | alias d
2 | alias a
3 | alias z
myTable的:
id | name
-----------
1 | name 1
2 | name 2
3 | name 2
答案 0 :(得分:0)
这是你想要的吗?
SELECT myValue, v.val
FROM myTable t LEFT JOIN
(VALUES ('o1'), ('o2'), ('o3'), ('o4')) v(val)
ON t.myOtherValue = v.val;
让我感到震惊的是你也可以这样做:
SELECT myValue,
(CASE WHEN myOtherValue IN ('o1', 'o2', 'o3', 'o4')
THEN myOtherValue
END) as val
FROM myTable t;
匹配的值已存在于myOtherValue
中。
答案 1 :(得分:0)
select name, id
from mytable m
join (select id from myalias where alias in ('alias a', 'alias b') a on m.id = a.id
where name = 'name 1' or name = 'name 2' ;