我艰难地了解到 Access 不允许您进行完整的外部联接,在阅读如何模拟一个外部联接时,我已经开始了解如何这样做,但是在尝试将其应用于两个以上的表时遇到了问题.
是否像执行以下操作一样简单?
SELECT * FROM table1
LEFT JOIN table2 ON table1.field = table2.field
LEFT JOIN table3 ON table1.field = table3.field
UNION
SELECT * FROM table1
RIGHT JOIN table2 ON table1.field = table2.field
RIGHT JOIN table3 ON table1.field = table3.field
Run Code Online (Sandbox Code Playgroud) 如果有两个表格如下所述:
表格1
day acount
1998-03-01 8
1998-03-04 9
1998-03-05 10
1998-03-09 8
Run Code Online (Sandbox Code Playgroud)
表2
day bcount
1998-03-02 9
1998-03-03 7
1998-03-05 4
1998-03-06 3
Run Code Online (Sandbox Code Playgroud)
select查询是否可以按以下格式按升序返回数据?
结果
day acount bcount
1998-03-01 8 0
1998-03-02 0 9
1998-03-03 0 7
1998-03-04 9 0
1998-03-05 10 4
1998-03-06 3 0
1998-03-09 8 0
Run Code Online (Sandbox Code Playgroud) 这可能比任何事情都更像是一个设计问题,但我希望没有太多伏都教就可以实现.
假设我有一个这样的表:
SELECT * FROM stuff;
id grp
1 a
2 a
3 a
1 b
2 b
4 b
Run Code Online (Sandbox Code Playgroud)
我希望得到这样的东西(ID分组在列中):
a.id b.id
1 1
2 2
3 null
null 4
Run Code Online (Sandbox Code Playgroud)
这可能吗?我试过以下查询......
SELECT a.id, b.id FROM stuff a
FULL OUTER JOIN stuff b ON a.id = b.id
WHERE a.grp = 'a' AND b.grp = 'b';
Run Code Online (Sandbox Code Playgroud)
...但我只得到公共节点:
a.id b.id
1 1
2 2
Run Code Online (Sandbox Code Playgroud)
我也试过玩JOIN ON和WHERE,但似乎无法获得理想的结果.
我在网上找到的最接近的问题就是这个问题,但我也无法让UNION工作.
性能不是问题,我可以假设只有2组.
有任何想法吗?
我有两个表我正在进行全外连接.他们加入变量"accsnnum",他们都共享.但我有一个问题.只有当两个集合中都存在时,才会打印出来,但我需要它才能打印出来,无论它是否都在两者中,因为我正在比较按accsnum分组的变量的计数.
为了说明,我有一个看起来像这样的labtable(只有这两个变量):
accsnum lab_lbcount
A12 3
A11 5
A14 7
A13 5
Run Code Online (Sandbox Code Playgroud)
并且看起来像这样的rslttable(只有这两个变量):
accsnum rslt_lbcount
A15 5
A12 2
A14 7
A16 3
Run Code Online (Sandbox Code Playgroud)
我使用以下代码组合这两个:
proc sql;
create table both as
select Labtable.accsnnum label="Lab_accsnnum", Rslttable.accsnnum
label="Rslt_accsnnum", Labtable.Lab_lbcount label="Lab_lbtestcd_count",
Rslttable.Rslt_lbcount label="Rslt_lbtestcd_count",
Lab_lbcount-Rslt_lbcount as difference
from work.Labtable
full outer join work.Rslttable
on Labtable.accsnnum = Rslttable.accsnnum;
quit;
Run Code Online (Sandbox Code Playgroud)
这会产生下表:
accsnum lab_lbcount rslt_lbcount difference
5 . .
A12 3 2 1
5 . .
A14 7 7 0
. 5 .
. 3 .
Run Code Online (Sandbox Code Playgroud)
请注意,它仅打印出两个表连接的位置的accsnum,但包括"lb_count"和"rslt_count"的计数.我需要让它打印出该变量中的accsnum,即使它不在两者中,或者我需要通过accsnum想出一种方法来加入,但仍然打印出两个表中每个表的accsum.基本上,我希望输出看起来像这样:
accsnum …Run Code Online (Sandbox Code Playgroud) 我试图从3个表中获得所有组合的完整结果集,但它不起作用,因为我无法弄清楚如何告诉SQL-Server 2008我想要什么.
我把它简化为以下类似的问题...我有3个表:
table `date_ranges`:
--------------------------------------------------------
| start_day | end_day |
| -------------------------------------------------------- |
| November, 01 2015 14:37:00 | November, 02 2015 00:00:00 |
| November, 02 2015 00:00:00 | November, 03 2015 00:00:00 |
| November, 03 2015 00:00:00 | November, 04 2015 00:00:00 |
| November, 04 2015 00:00:00 | November, 04 2015 02:00:00 |
--------------------------------------------------------
table `sites`:
----
| site |
| ---- |
| 1 |
| 2 |
| 3 |
| 4 | …Run Code Online (Sandbox Code Playgroud) 我有以下查询
SELECT *
FROM tableA, tableB
WHERE Conditions [+]
Run Code Online (Sandbox Code Playgroud)
这个关键字条件[+]代表什么?此查询如何表现为外部联接?
我有一个表包含多个日期的多个记录.
我试图看到"日期1"和"日期2"之间的区别,我的完整外部联接不会返回我期望的数据.
我知道在日期1有13278行,在日期2有13282 - 因此我希望看到至少13282行,但我回到13195 ...这是一个INNER JOIN(我测试了这个).
我希望得到如下结果:
001 000123 009 NULL 1000
001 000124 009 1000 1000
001 000125 009 1000 1000
001 000126 009 1000 NULL
Run Code Online (Sandbox Code Playgroud)
但这不会从任何一方获得任何空行?
SELECT
COALESCE(c.AccountBranch, p.AccountBranch)
, COALESCE(c.AccountNumber, p.AccountNumber)
, COALESCE(c.AccountSuffix, p.AccountSuffix)
, c.PrincipleAmount
, p.PrincipleAmount
FROM ADStaging..cb_account_extension_principle_dpd c
FULL OUTER JOIN ADStaging..cb_account_extension_principle_dpd p
ON p.AccountBranch = c.AccountBranch
AND p.AccountNumber = c.AccountNumber
AND p.AccountSuffix = c.AccountSuffix
WHERE
(c.BusinessDataDate IS NULL OR c.BusinessDataDate = @CurrentBusinessDataDate)
AND
(p.BusinessDataDate IS NULL OR p.BusinessDataDate = @PreviousBusinessDataDate) …Run Code Online (Sandbox Code Playgroud) 我有两个表,我想要两个表中的所有数据。如果表具有匹配的 AssetID,则将它们连接到一行。如果没有,则在单独的行上。完整的外部联接听起来像是正确的方法,但我在如何根据它来自哪个表来选择键方面遇到了问题。
TABLE A TABLE B
AssetID | Valuable AssetID | Protected
------------------- -------------------
123 | Yes 123 | Yes
456 | No 321 | No
653 | Yes
Run Code Online (Sandbox Code Playgroud)
目标:
TABLE C
AssetID | Valuable | Protected
---------------------------
123 | Yes |Yes
456 | No |
653 | Yes |
321 | |No
SELECT TableA.AssetID, TableA.Valuable, TableB.Protected
FROM (
SELECT AssetID, Valuable
FROM TableA
) ta
FULL OUTER JOIN (
SELECT AssetID, Protected
FROM TableB
) tb ON ta.AssetID=tb.AssetID
Run Code Online (Sandbox Code Playgroud)
生产 …
sql ×5
oracle ×2
sql-server ×2
t-sql ×2
join ×1
ms-access ×1
outer-join ×1
postgresql ×1
sas ×1
select ×1