【发布时间】:2017-10-17 08:55:01
【问题描述】:
我需要进行一个查询,将一个表中的 3 个不同 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#;
【问题讨论】:
-
Book_Kalender表上的Id都是同名还是异名?
-
我认为您的 Book_Kalendar 表需要规范化 - 每当您发现自己在同一个表的多个列中存储相同的内容时,是时候使用包含这些 ID 的子表了,外键返回父表。
-
它们是不同的 id,因此它们在 Book_Sommerhuse 表中引用了不同的名称。
-
@Leth 然后使用 LEFT JOIN,请参阅下面的答案
-
谢谢,但遗憾的是无法规范化此表,因为它需要很快导入 SQL 数据库。我正在尝试创建一个与我要导入的表中的结构相匹配的选择语句。
标签: sql sql-server database select join