如何确定匹配的IN子句中的值

时间:2017-02-13 12:49:23

标签: sql postgresql

我有一个数据库,我想同时查询多个值(出于预先的目的)。我想发送一个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

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)

这是你想要的吗?将名称添加到选择列表可以让您知道哪个名称与哪个ID匹配。联接取代了...的位置

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' ;