【问题标题】:Rearrange sql statement [closed]重新排列sql语句[关闭]
【发布时间】: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


【解决方案1】:
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 FilteredAccount as CRMAF_FilteredAccount    
LEFT JOIN Filteredbsv_memberrelation as pos ON pos.bsv_memberlist = mbl_bsv_memberlist.bsv_memberlistid 
RIGHT JOIN Filteredbsv_memberlist as mbl_bsv_memberlist ON CRMAF_FilteredAccount.accountid = pos.bsv_organization

【讨论】:

  • 感谢您的帮助 :) 现在的问题是我得到:无法绑定多部分标识符“pos.bsv_organization”。这是因为“pos”别名是在相应的连接之后声明的。
猜你喜欢
  • 2015-07-24
  • 1970-01-01
  • 2021-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-22
  • 2020-09-09
  • 2012-09-10
相关资源
最近更新 更多