查询左连接而没有来自B表的所有右行

时间:2018-06-06 10:57:02

标签: sql oracle

我有2张桌子,A和B. 我需要选择B中A + 1列的所有列。 不幸的是,B在A中有1行的多行(所有相同) 在连接条件。

我尝试但是我不能在A中将一行中的一行与左连接隔离,而保留我的选择。

我该怎么做这个查询?在ORACLE SQL中查询

提前致谢。

2 个答案:

答案 0 :(得分:0)

这对outer apply很有用。查询的结构如下所示:

select a.*, b.col
from a outer apply
     (select top 1 b.col
      from b
      where b.? = a.?
     ) b;

通常,您只能将top 1order by一起使用。在这种情况下,您选择哪一行似乎没有区别。

答案 1 :(得分:0)

您可以在group by的所有列上A,然后使用聚合(例如maxmin)来选择任何相同的B值:

select  a.*
,       b.min_col1
from    TableA a
left join
        (
        select  a_id
        ,       min(col1) as min_col1
        from    TableB
        group by
                a_id
        ) b
on      b.a_id = a.id