【发布时间】:2021-11-03 08:13:11
【问题描述】:
我有以下疑问:
SELECT
bsv_targetgroupattribute1,
pos.bsv_address_multiline,
pos.bsv_memberlist_memberlistcode,
pos.owneridname,
mbl_bsv_memberlist.bsv_memberlistcode,
pos.bsv_count_german,
pos.bsv_count_french,
pos.bsv_count_italian,
pos.bsv_count_rr,
pos.bsv_count_english
FROM Filteredbsv_memberlist as mbl_bsv_memberlist
LEFT JOIN Filteredbsv_memberrelation as pos ON pos.bsv_memberlist = mbl_bsv_memberlist.bsv_memberlistid
LEFT JOIN FilteredAccount as CRMAF_FilteredAccount ON CRMAF_FilteredAccount.accountid = pos.bsv_organization
我需要重新排列查询以使另一个实体以 From 子句开头。这意味着连接需要重新排列到另一个连接。
我的新查询应该看起来像这样,重新排列连接。
SELECT
pos.bsv_organization,
CRMAF_org.accountid,
CRMAF_org.bsv_targetgroupattribute1,
pos.bsv_address_multiline,
pos.bsv_memberlist_memberlistcode,
pos.owneridname,
CRMAF_bsv_memberlist.bsv_memberlistcode,
pos.bsv_count_german,
pos.bsv_count_french,
pos.bsv_count_italian,
pos.bsv_count_rr,
pos.bsv_count_english
FROM FilteredAccount as CRMAF_org
....
....
....
谁能帮我得到正确的查询? 非常感谢您的帮助。
【问题讨论】:
-
A 左连接 B eq. B 右加入 A。但是为什么你“需要”这样做呢?
-
您还没有添加任何新表 - 鉴于这些表的名称,它们本身是视图吗?如果它还不是最优的,查询优化器可能会重新排列您的连接顺序,以(通常)尽可能高效。
-
我需要这样做,因为出于技术目的,需要将表 FilteredAccount 放在 FROM 子句之后。 @Stu:第一个完整查询已经包含所有表。第二个查询的不同之处在于表“FilteredAccount”需要放在 FROM 关键字之后,而不是作为最后一个连接的一部分。该子句的其余部分需要相应地重新排列
-
什么“技术目的”?正如 Stu 所说,优化器无论如何都会选择最佳执行顺序。你应该只写最清晰的 SQL。
-
在此处更改连接顺序几乎肯定不会对所显示的查询产生影响,我几乎可以保证两者的执行计划是相同的。您要解决的实际问题是什么?
标签: sql sql-server join