【发布时间】:2015-06-25 17:14:06
【问题描述】:
我正在尝试编写一个涉及 3 个表的查询,并将其中两个表连接到一个主表上。
SELECT UNIT_MAIN.UNIT_NO, DEPT_MAIN.LEV_2, Card.CardNumberLong AS [Some
Number], Card.Enabled, F_CARD.CARD_NO, F_CARD.END_DT
FROM (((UNIT_MAIN
INNER JOIN DEPT_MAIN ON UNIT_MAIN.USING_DEPT = DEPT_MAIN.DEPT_ID)
LEFT JOIN Card ON (UNIT_MAIN.UNIT_NO = Card.UnitCode AND Card.Enabled = True) )
LEFT JOIN F_CARD ON (UNIT_MAIN.UNIT_ID = F_CARD.ASSIGNED_ID AND (F_CARD.END_DT) Is Null ))
WHERE (((UNIT_MAIN.STATUS)="A") AND ((DEPT_MAIN.LEV_2)="AM") AND ((Card.Enabled)=True) )
OR (((UNIT_MAIN.STATUS)="D") AND ((DEPT_MAIN.LEV_2)="AM") AND ((Card.Enabled)=True) )
我遇到的问题是,当 F_CARD 表中有 F_CARD.END_DT 不为空的行时,导致主表(单元表)不显示,即使它是左连接并且 F_CARD 表行不满足加入条件(或者我相信)。
我在 F_CARD 表上没有任何 where 子句,它们仅适用于连接条件。
编辑 当我执行
LEFT JOIN MFIVE_F_CARD ON (MFIVE_UNIT_DEPT_COMP_MAIN.UNIT_ID = MFIVE_F_CARD.ASSIGNED_ID AND ((MFIVE_F_CARD.END_DT) Is Null)
如果 F_CARD 表包含具有 END_DT 的行,则单元不会出现,我相信由于左连接条件失败,内表(单元表)无论如何都应该出现。
如果我从查询中删除任何与 F_CARD 相关的值,则会出现我正在寻找的缺失单位。它是内连接、左连接、左连接。当第二个左连接发生时,即使它们应该出现,我也会丢失行。
我缩小了我的连接范围,只是用 F_CARD 做了左边的内部。试图看看为什么它不返回连接失败的行。
尝试执行以下操作,但我得到一个不受支持的连接错误...
SELECT
UNIT_MAIN.UNIT_NO
,DEPT_MAIN.LEV_2
,Card.CardNumberLong AS [SomeNumber]
,Card.Enabled
,F_CARD.CARD_NO
,F_CARD.END_DT FROM
(
(
(
UNIT_MAIN
INNER JOIN DEPT_MAIN
ON UNIT_MAIN.USING_DEPT = DEPT_MAIN.DEPT_ID
)
LEFT JOIN Card
ON (UNIT_MAIN.UNIT_NO = Card.UnitCode AND Card.Enabled = True)
)
LEFT JOIN F_CARD
ON (UNIT_MAIN.UNIT_ID = F_CARD.ASSIGNED_ID AND F_CARD.END_DT Is Null)
) WHERE
(UNIT_MAIN.STATUS = "A" OR UNIT_MAIN.STATUS = "D")
AND DEPT_MAIN.LEV_2 = "AM"
谢谢。
【问题讨论】: