SQL / Access - 左连接问题,值来自哪里?

时间:2011-06-29 12:06:40

标签: sql ms-access ms-access-2007

我有一个交叉表查询,如下所示:

State           Building        1          2          3          4           5

NY

SC

FL

我遇到的问题是我想要显示所有状态,无论是否有数据。所以,我需要一个左连接。不幸的是,当我在代码中替换Inner Join for Left Join时,没有任何改变。我只想弄清楚问题的来源,我认为这可能是以下原因之一:

  1. 查询不知道从哪里拉 (来自各州的价值观) 列出来查看,但这可能 不在它看的地方)

  2. 左连接在交叉表上不起作用 查询。

  3. 有人可以告诉我我做错了吗?

    这是SQL:

    TRANSFORM Nz(Count(Demographics.ID))+0 AS CountOfID 
    SELECT Demographics.State
    FROM Research 
        INNER JOIN ( Demographics
            INNER JOIN [Status] 
                ON Demographics.ID=[Status].ID
                ) 
            ON (Research.ID=Demographics.ID) 
            AND (Research.ID=[Status].ID) 
    WHERE ((([Status].Building_Status)='Complete'))
    GROUP BY    Demographics.State,
                [Status].Building_Status 
    PIVOT Research.Site In (1,2,3,4,5,6,7,8,9,10,11)
    

    理想情况下,我可以在上面的In语句中指定行值(当前指定列值为1-10),但我认为不能这样做。

4 个答案:

答案 0 :(得分:1)

我没有完全得到你的例子,但是从你的评论“我想要显示所有状态,无论是否有数据”,我认为你想要一个“外部”加入。外部联接就是这样 - 它们包括数据,无论是否存在“匹配”。内部联接(默认)仅在匹配时包含数据。

希望这有帮助, 约翰

答案 1 :(得分:0)

你应该这样改变:

  TRANSFORM Nz(Count(Demographics.ID))+0 AS CountOfID
  SELECT Demographics.State
  FROM Demographics
      LEFT JOIN ( Research
         LEFT JOIN [Status]
              ON Demographics.ID=[Status].ID
             )
          ON (Research.ID=Demographics.ID)
          AND (Research.ID=[Status].ID)
  WHERE ((([Status].Building_Status)='Complete'))
 GROUP BY    Demographics.State,
             [Status].Building_Status
 PIVOT Research.Site In (1,2,3,4,5,6,7,8,9,10,11) 

答案 2 :(得分:0)

如果你的问题是表人口统计数据中有0行,状态='NY'(例如),但你想在结果中看到状态'NY',那么你需要另一个表格,例如拥有其中所有州的州,并将其作为您的驾驶表:

SELECT States.State
FROM States
    LEFT OUTER JOIN Demographics ON Demographics.state = States.state
...

答案 3 :(得分:0)

你可以使用两步解决方案(它更具可读性)
首先将您的实际(和工作)sql语句作为视图包含在内

create view step1 as 
TRANSFORM ....
SELECT ...
FROM ...
PIVOT ...

然后创建一个选择: (你需要像@Tony安德鲁斯那样的状态表)

select * -- or whatever
from state 
left join step1 on state.id = step1.state

这就是