在SQL中使用表行连接值列表

unc*_*der 26 sql sql-server oracle

假设我有一个值列表,例如1, 2, 3, 4, 5和某些列中存在某些值的表.这是一个例子:

id  name
 1  Alice
 3  Cindy
 5  Elmore
 6  Felix
Run Code Online (Sandbox Code Playgroud)

我想创建一个SELECT语句,其中包含列表中的所有值以及与这些值匹配的行中的信息,即LEFT OUTER JOIN在我的列表和表之间执行,因此结果如下所示:

id  name
 1  Alice
 2  (null)
 3  Cindy
 4  (null)
 5  Elmore
Run Code Online (Sandbox Code Playgroud)

如何在不创建临时表或使用多个UNION运算符的情况下执行此操作?

Cha*_*ana 48

如果在Microsoft SQL Server 2008或更高版本中,则可以使用表值构造函数

 Select v.valueId, m.name 
 From (values (1), (2), (3), (4), (5)) v(valueId)
     left Join otherTable m
        on m.id = v.valueId
Run Code Online (Sandbox Code Playgroud)

不知道Oracle是否有类似的构造

  • @JakeJ,括号,(或其他一些标记),作为每行数据之间的分隔符是必要的.在每个括号中,将为该单行数据设置一个以逗号分隔的值...如`(values(1,16,'Dave'),(2,22,'Mary'),(3,8, 'joey'),(4,55,'爸爸'),(5,46,'妈妈'))v(PersonId,年龄,姓名).`如果没有括号,则需要一些其他标记来分隔行. (3认同)