SQL Server - 组合OUTER和INNER联接

Bob*_*ith 15 sql-server

我有3个表,我必须将表A与表B内连接,但是在表A和表C之间的左外表.

我可以在同一个查询中组合外部和内部联接吗?我可以嵌套查询并获得所需的结果,但我无法在同一查询中执行这两个连接.看来,在其他SQL语言中,加入的顺序很重要.这是SQL Server中的情况吗?


好的,这是场景.

考虑3个表.表A,表F,表D.

我将需要记录集来包含D中的所有行,而不管它是否存在于F中(在它与A连接的内部之后).因此,我想到了一个外部联接.我需要的是:

  1. 首先在A和F之间进行内连接以获得一个集合(这可能是一个空集)
  2. 然后使用D在(1)中的记录集进行外连接

kri*_*tof 17

如果我理解正确你想要这样的东西:

select
    *
from
    a 
    left outer join c
        inner join b on c.bID = b.ID
    on a.cID = c.ID
Run Code Online (Sandbox Code Playgroud)

  • 整蛊!如果你将"a.cID = c.ID"移到"左外连接c"的正下方,这不会给出相同的结果,或者我只是遗漏了什么?这种行为是否记录在某处?我没有意识到on没有直接跟随加入. (3认同)

gam*_*mov 9

对于我的情况,我需要为我的查询放置表别名才能正常工作:

SELECT * FROM ("purchased_items" p1
     INNER JOIN "purchase_orders" po1 ON (po1."id" = p1."purchase_order_id")) AS p4
LEFT OUTER JOIN (purchased_items p2
      INNER JOIN "purchase_orders" po2 ON (po2."id" = p2."purchase_order_id")) AS p5
ON (p4.item_variant_id = p5.item_variant_id AND p4.delivery_date < p5.delivery_date) 
WHERE p5.delivery_date IS NULL AND p4.delivered <> 0 
Run Code Online (Sandbox Code Playgroud)


Ant*_*nes 5

当然你可以在同一个查询中加入:-

FROM TableA a
INNER JOIN Table b ON a.TableA_ID = b.TableA_ID
LEFT OUTER JOIN Table c ON a.TableA_ID = c.TableA_ID
Run Code Online (Sandbox Code Playgroud)


gkr*_*ers 2

您可以在同一查询中同时使用内连接和外连接,但它们的顺序很重要。看到这个问题:
内连接和外连接;表格的顺序重要吗?