【发布时间】:2020-10-16 05:33:16
【问题描述】:
【问题讨论】:
标签: java sql-server oracle
【问题讨论】:
标签: java sql-server oracle
一个想法是构建一个派生表来保存您搜索的值,然后将原始表与left join 一起使用。在 SQL Server 中,您将使用 values():
select v.b, t.*
from (values(111), (777), (888)) v(b)
left join mytable t on t.b = v.b
order by v.b
我添加了一个包含最初搜索的值的列,因为它对我来说更有意义 - 如果需要,您可以将其删除。
Oracle 不支持这种语法;一个(更长的)替代方案是union all 和from dual:
select v.b, t.*
from (
select 111 b from dual
union all select 777 from dual
union all select 888 from dual
) v
left join mytable t on t.b = v.b
order by v.b
【讨论】:
对同一张表进行左连接。
SELECT left_x.*
FROM x primary_x
LEFT JOIN X left_x ON primary_x.a = left_x.a AND left_x.b IN ('111', '777', '888')
这里的关键是选择子句中的左连接表(以获取 NULL),并将 where 子句作为连接语句的一部分(以确保所有行仍然存在于主表上) .
【讨论】: