访问SQL:联合选择,显示两个字段

时间:2012-01-03 23:31:19

标签: sql ms-access

我有这个SQL:

SELECT Ph.Account, Ph.Ct FROM Ph
UNION SELECT Rx.Account, Rx.Ct FROM Rx;

哪种方法很好,但Ph.Ct和Rx.Ct字段可能并不总是相同。所以我想显示它们,但查询只显示1“Ct”字段而不是两者。

如何让它同时显示?

这是ph

12685      3
29568      1
38771      2

这是rx

10657      1
12685      2
68781      2
79874      1

我想从查询中得到什么:

Account    ph.ct    rx.ct
10657               1
12685      3        2
29568      1
38771      2
68781               2
79874               1

UNION获取正确的数据集(大约800个结果),但不是正确的字段。我试过的任何JOIN都没有给出正确的数据集(只有大约300个结果)。

5 个答案:

答案 0 :(得分:5)

您需要的是全外连接。对于出现在任一表格中的Account的每个值,如果出现Ct的给定值,则会为每个表格提供Account的相应值,否则为空。

select Account,Ph.Ct as ph_ct,Rx.Ct as rx_ct
from Ph full outer join Rx on (Ph.Account=Rx.Account);

编辑:由于Access显然不支持完全外连接(出于某种可怕的原因),因此左连接与右连接的并集可以实现相同的效果:

select Ph.Account, Ph.Ct as ph_ct, Rx.Ct as rx_ct
from Ph left join Rx on (Ph.Account=Rx.Account)
union
select Rx.Account, Ph.Ct as ph_ct,Rx. Ct as rx_ct
from Ph right join Rx on (Ph.Account=Rx.Account);

也相当于(可能更快):

select Ph.Account, Ph.Ct as ph_ct, Rx.Ct as rx_ct
from Ph left join Rx on (Ph.Account=Rx.Account)
where (Rx.Account IS NULL)
union all
select Rx.Account, Ph.Ct as ph_ct, Rx.Ct as rx_ct
from Ph right join Rx on (Ph.Account=Rx.Account);

答案 1 :(得分:3)

您无法在MS Access中拥有完整的外部联接,因此:

SELECT m.Account, Ph.Ct, Rx.Ct FROM
((SELECT Ph.Account FROM Ph
UNION SELECT Rx.Account FROM Rx) As m
LEFT JOIN Ph ON m.Account = Ph.Account)
LEFT JOIN Rx ON m.Account = Rx.Account 

答案 2 :(得分:0)

我认为你不想要union。你想要一个join。如果您加入Account上的字段,您也可以显示Rx.Ct和Ph.Ct。

union中,它列出了一个表中的所有行,堆叠在另一个表的顶部,不包括重复项。每行都来自不同的表格。

join中,每一行都是两个表的组合,这意味着未连接的列可以包含不同的值。

你走了:

SELECT Ph.Account, Ph.Ct, Rx.Ct FROM Ph INNER JOIN Rx ON Ph.Account=Rx.Account;

答案 3 :(得分:0)

您需要join,而不是union

select
    coalesce(Ph.Account, Rx.Account) as Account
    Ph.Ct,
    Rx.Ct
from
    Ph
    full outer join Rx on
        Ph.Account = Rx.Account

您可以将inner更改为您想要的联接类型。详细了解不同类型的联接here

当您想要获取一组结果并将它们附加到另一个结果的行集时,将使用

union。当您想要获取一组结果并将它们附加到另一个结果的列集时,将使用join

答案 4 :(得分:0)

仅供将来有关UNION运营商的参考:

UNION运算符用于组合两个或多个SELECT语句的结果集。

请注意,UNION中的每个SELECT语句必须具有相同的列数。列还必须具有类似的数据类型。此外,每个SELECT语句中的列必须具有相同的顺序。

注意:默认情况下,UNION运算符仅选择不同的值。要允许重复值,请使用UNION ALL。

了解更多信息:UNION Operator