我有3个表,我必须将表A与表B内连接,但在表A和表C之间留下左外。
我可以在同一个查询中组合外部和内部联接吗?我可以嵌套查询并获得所需的结果,但我无法在同一查询中执行这两个连接。看来,在其他SQL语言中,加入的顺序很重要。这也是SQL Server中的情况吗?
好的,这是情景。
考虑3个表格。表A,表F,表D.
我需要记录集来包含D中的所有行,而不管它是否存在于F中(在它内部与A连接之后)。因此,我想到了一个外部联接。我需要的是:
答案 0 :(得分:17)
如果我理解正确你想要这样的东西:
select
*
from
a
left outer join c
inner join b on c.bID = b.ID
on a.cID = c.ID
答案 1 :(得分: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
答案 2 :(得分:4)
当然可以在同一个查询中进行连接: -
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
答案 3 :(得分:2)
您可以在同一查询中使用内部和外部联接,但它们的顺序很重要。看到这个问题:
Inner join & outer join; is the order of tables in from important?
答案 4 :(得分:2)
订单不应该重要。
这是来自Wikimedia Commons的维恩图。无论查询顺序如何,您将获得圆A和B之间的重叠,其中C的列为空,其中C不与A和B的组合重叠。
答案 5 :(得分:1)
从你的跟进中,听起来你想要一个'有条件'的内部联接。
基本上,“如果A和B有记录,INNER JOIN到C”。
但是,您可能遇到问题,其中查询中的INNER JOIN未显示A没有与B或C关联的记录的记录。如果它们位于相同的“范围”,则INNERS将始终运行,你不能有条件地根据他们的订单运行它们。
您必须使用两个LEFT连接并过滤掉您不想要的记录,或者使用View来限制INNER JOIN。
实施例。 LEFT JOIN vw_MyView ON A.ID = vw_MyView.A_ID
MyView将表B和C与您的INNER JOIN结合使用。这将允许INNER JOIN在视图内部运行,然后您可以LEFT JOIN到结果。
答案 6 :(得分:0)
是的,你可以做两个是同一个查询,是的,顺序很重要。
答案 7 :(得分:0)
问题可能不是特定的加入(安东尼告诉你如何做你对我们所描述的)。记住人们经常使用左连接有问题,因为他们试图把东西放在where子句中引用右边的表格连接的一侧从而将它从外连接转换为内连接(除非您查看第二个表字段为空的那些记录,它们为您提供第一个表中的记录而不是第二个表中的记录)。
如果我们说您使用的实际代码不是产生所需的结果以及一些样本数据和样本结果,我们可以帮助您更好。
答案 8 :(得分:0)
这会在1到0或许多FK上出现。
两种方法
tomcat-embed-core-8.5.11.jar
的顺序
将on
加入最后
不幸的是你更改了表名。我将使用后来的名字。
outer