在外部表中添加具有ID的多个ID列以显示多个名称列
问题描述:
我需要进行一个查询,即内部连接来自一个表的另一个ID与来自另一个表的ID不同,然后显示该表中的名称值选择查询。我会尽量使它更清楚。在外部表中添加具有ID的多个ID列以显示多个名称列
在我的一个表我有这3列用的ID:
Book_Kalender.BS_ID,
Book_Kalender.BS_ID_Prio2,
Book_Kalender.BS_ID_Prio3,
这些都需要作为内部与另一个表中的列,其中包含与这些ID相关联的名称加入:
Book_Sommerhuse.[BS_ID]
在我的SELECT查询中,我包含了来自外部表的名称列。我想改为有3列,每列都有与ID对应的关联名称。
Book_Sommerhuse.BS_Navn
到目前为止,我已经试图使多个内部连接使用AND关键字:
INNER JOIN Book_Kalender ON Book_Sommerhuse.[BS_ID] = Book_Kalender.[BS_ID]
AND Book_Sommerhuse.[BS_ID] = Book_Kalender.[BS_ID_Prio2]
但这种回报,从我的选择查询空视图。我也不确定如何为与ID关联的每个名称创建新列。
全面查询:
SELECT
Book_Kalender.BK_ID,
Book_Kalender.BK_DatoFra,
Book_Kalender.BK_DatoTil,
Book_Kalender.BK_M_Navn,
Book_Kalender.BK_M_Adr,
Book_Kalender.BK_M_PostBy,
Book_Kalender.BK_M_Afd,
Book_Kalender.BK_M_MedArbNr,
Book_Kalender.BK_M_Tlf,
Book_Kalender.BK_M_Email,
Book_Kalender.BK_Tidl_Lejet,
Book_Kalender.BK_Tidl_Lejet_Txt,
Book_Kalender.BS_ID,
Book_Kalender.BS_ID_Prio2,
Book_Kalender.BS_ID_Prio3,
A.BS_Navn as BS_Navn1,
B.BS_Navn as BS_Navn2,
c.BS_Navn as BS_Navn3,
coalesce(A.BS_Navn,B.BS_Navn,c.BS_Navn) as BS_Navn
FROM
Book_Kalender
LEFT JOIN Book_Sommerhuse A ON
Book_Kalender.BS_ID = A.BS_ID
LEFT JOIN Book_Sommerhuse B ON
Book_Kalender.BS_ID_Prio2 = B.BS_ID
LEFT JOIN Book_Sommerhuse C ON
Book_Kalender.BS_ID_Prio3 = C.BS_ID
WHERE
Book_Kalender.BK_DatoFra BETWEEN #10/15/2017# AND #12/31/2018#;
答
需要3左连接:
select
Book_Kalender.*,
A.BS_Navn as BS_Navn1,
B.BS_Navn as BS_Navn2,
C.BS_Navn as BS_Navn3,
coalesce(A.BS_Navn,B.BS_Navn,c.BS_Navn) as BS_Navn -- first non null BS_Navn
from
Book_Kalender
LEFT JOIN Book_Sommerhuse A ON
Book_Kalender.BS_ID = A.BS_ID
LEFT JOIN Book_Sommerhuse B ON
Book_Kalender.BS_ID_Prio2 = B.BS_ID
LEFT JOIN Book_Sommerhuse C ON
Book_Kalender.BS_ID_Prio3 = C.BS_ID
答
SELECT
K.BS_ID
,S1.BS_Navn
,K.BS_ID_Prio2
,S2.BS_Navn 'Prio2_BS_Navn'
,K.BS_ID_Prio3
,S3.BS_Navn 'Prio3_BS_Navn'
FROM
Book_Kalender K
LEFT JOIN
Book_Sommerhuse S1 ON S1.BS_ID = K.BS_ID
LEFT JOIN
Book_Sommerhuse S2 ON S2.BS_ID = K.BS_ID_Prio2
LEFT JOIN
Book_Sommerhuse S3 ON S3.BS_ID = K.BS_ID_Prio3
+0
我正在使用MS Access运行此查询,因此语法稍有不同。对不起,我的帖子中没有说清楚。据我所知,我需要将第一个连接子句用括号括起来,从逻辑上将它与其他连接分开,但它仍然会抛出“缺少操作符”的错误。 – Leth
答
使用可以使用派生表可能为您提供三个数据作为一列,然后你可以申请加入,像这样的
INNER JOIN (
SELECT BS_IDs FROM Book_Kalender CROSS APPLY(
VALUES (BS_ID), (BS_ID_Prio2), (BS_ID_Prio3)) Cols(BS_IDs)
) DerivedBook_Kalender ON Book_Sommerhuse.[BS_ID] = DerivedBook_Kalender.[BS_IDs]
Book_Kalender表上的Id是否都指向相同的名称或不同的名称? –
我认为你的Book_Kalendar表需要规范化 - 每当你发现自己在同一个表中的多个列中存储相同的东西时,是时候为包含这些标识的子表添加外键,并返回父表。 – ADyson
它们是不同的ID,因此它们在Book_Sommerhuse表中引用不同的名称。 – Leth