【发布时间】:2019-08-22 22:13:34
【问题描述】:
我最近看到了这个查询,它找到了客户可以去的所有聚会:
SELECT *
FROM Party
INNER JOIN Organizer on Organizer.OrganizerId = Party.OrganizerId
LEFT JOIN Client on Client.ClientID = 1
LEFT JOIN PartyRegistration on PartyRegistration.PartyId = Party.PartyId
WHERE Party.OrganizerId = 0
AND (Party.HasGuestList = 0 OR PartyRegistration.ClientId = Client.ClientId)
我以前从未见过针对特定值的联接。看到这样的SQL代码正常吗?
我对左连接了解不多,但它可以应用于任何连接,例如,这将如何:
SELECT *
FROM Party
INNER JOIN Organizer on Organizer.OrganizerId = 0
比较结果是一样的:
SELECT *
FROM Party
INNER JOIN Organizer on Organizer.OrganizerId = Party.OrganizerId
WHERE Organizer.OrganizerId = 0
【问题讨论】:
-
如果您与替代方案进行比较,这只能是一个好/坏的做法。将测试放在左连接上与在哪里做两件不同的事情——所以这不是好/坏做法的问题。这可能是XY question。如果您想了解替代方案,请提供minimal reproducible example。但如果是这样的话,首先谷歌常见问题解答重新在左连接与哪里进行测试。
-
您的评论有何意义? PS再次--“正常”为了什么--实现什么?
-
您已经草率地得出结论,或者没有通过“坏”的措辞提出您想要的问题 - 除非有替代方案,否则不会有不好的做法。想想你真正想问的问题。
-
您添加的代码从左连接切换到内连接。它做了一些不同的事情。它提出了一个不同的问题。如果您不了解连接的工作原理,请研究一下,如果您遇到困难,请询问有关理解某些权威演示的问题。 PS 对于内部连接,您可以在其中添加条件。一个常见问题。对于左连接,您不能。一个常见问题。在左连接删除任何由空值扩展的行之后,内连接或需要右表列不为空的地方,即仅在行上留下内连接,即“将外连接变为内连接”。一个常见问题。
-
请在每个帖子中提出一个问题。但它们都是常见问题解答——您是否可以以及何时应该使用 on 与 where 用于内部和外部连接。在考虑发布之前,请始终在谷歌上搜索您的错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有或没有您的特定字符串/名称,并阅读许多答案。如果您发布问题,请使用一个短语作为标题。请参阅How to Ask 和投票箭头鼠标悬停文本。
标签: sql join syntax left-join where