Sql server 查询具有两个外部联接的3个表

Sql server 查询具有两个外部联接的3个表,sql-server,join,Sql Server,Join,我在运行T-SQL查询以联接3个表(DIMSTORE、fctSales和dimDates)时遇到问题 我需要保留DIMSTORE(所选门店列表)和dimDates(日期选择)中的所有行以及fctSales中的匹配详细信息。我只能通过fctSales表加入他们,该表有商店和日期的键 我尝试了左外部连接来获取所选商店的完整列表,然后右外部连接来获取所有日期,但始终无法同时获取这两个日期 dimStores(店名) fctSales(店名、日期键) 日期(日期) 请帮助尝试一下 使用左连接时,事实上您

我在运行T-SQL查询以联接3个表(DIMSTORE、fctSales和dimDates)时遇到问题

我需要保留DIMSTORE(所选门店列表)和dimDates(日期选择)中的所有行以及fctSales中的匹配详细信息。我只能通过fctSales表加入他们,该表有商店和日期的键

我尝试了左外部连接来获取所选商店的完整列表,然后右外部连接来获取所有日期,但始终无法同时获取这两个日期

dimStores(店名) fctSales(店名、日期键) 日期(日期)

请帮助

尝试一下 使用左连接时,事实上您确实保留了存储,但使用右连接时,只会考虑包含该日期数据的存储

为了在每个可能的日期保持所有的存储完全外部连接以获得所有的组合,然后才与数据连接

SELECT 
  st.StoreName
 ,sa.SaleItem
 ,dd.DateKey 
From dimStores as st
full outer join dimDates as dd on 
    1=1
Left outer join fctSales as sa on 
    st.StoreName = sa.StoreName and
    dd.DateKey = sa.DateKey
WHERE 
    dd.DateKey between 20150101 and 20150115 and 
    sa.StoreName in ('Aka','Bink','Gil')

在您的查询中进行最后一次加入
完全加入
非常感谢,它工作得非常完美,正是我想要的。你能解释一下什么是1=1吗?因为1=1总是真的,所以所有的行都是相互匹配的。dimStores中的每一行都将与dimDates匹配,就像交叉联接一样。它生成相关表格的笛卡尔乘积。
SELECT 
  st.StoreName
 ,sa.SaleItem
 ,dd.DateKey 
From dimStores as st
full outer join dimDates as dd on 
    1=1
Left outer join fctSales as sa on 
    st.StoreName = sa.StoreName and
    dd.DateKey = sa.DateKey
WHERE 
    dd.DateKey between 20150101 and 20150115 and 
    sa.StoreName in ('Aka','Bink','Gil')