Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 一个表中的两列是否可以连接到同一个第二个表?_Sql_Join - Fatal编程技术网

Sql 一个表中的两列是否可以连接到同一个第二个表?

Sql 一个表中的两列是否可以连接到同一个第二个表?,sql,join,Sql,Join,如果答案很简单,我表示歉意,但我对此有点陌生 基本上我有两张桌子 1) 此表使用以下列详细说明了一个人的简历详细信息 名|姓|月|日|月|月|年 2) 此表是一个名为“codebook”的参考表,用于查找 并具有以下列 键值 在第一个表中,“DOB-Day”和“DOB-Month”都引用“codebook表”(这是因为这两列实际上是应用程序中的组合框,所以存储在这里的值引用codebook表) 我的问题是当我试图查询数据库时——本质上,我希望显示给用户的结果显示“DOB-Day”和“DOB-Mo

如果答案很简单,我表示歉意,但我对此有点陌生

基本上我有两张桌子

1) 此表使用以下列详细说明了一个人的简历详细信息

名|姓|月|日|月|月|年

2) 此表是一个名为“codebook”的参考表,用于查找 并具有以下列

键值

在第一个表中,“DOB-Day”和“DOB-Month”都引用“codebook表”(这是因为这两列实际上是应用程序中的组合框,所以存储在这里的值引用codebook表)

我的问题是当我试图查询数据库时——本质上,我希望显示给用户的结果显示“DOB-Day”和“DOB-Month”列的实际值,而不是实际存储在第一个表中的ID

我将向这两个表中添加一些简单的数据以用于上下文

表1

Forename    Surname   DOB - Day     DOB - Month     DOB - Year
Sam         Smith     DOB_DAY_1     DOB_MONTH_6     1987
Tom         Nickles   DOB_DAY_13    DOB_MONTH_4     1974
Abigail     Peters    DOB_DAY_17    DOB_MONTH_10    2000
Marcus      Tompson   DOB_DAY_5     DOB_MONTH_11    2002
Rick        Ford                                    2000
表2

Key          Value
DOB_DAY_1    1
DOB_DAY_2    2
DOB_DAY_3    3
DOB_MONTH_1  January
DOB_MONTH_2  February
DOB_MONTH_3  March
我曾尝试在表上使用相等联接,以便“DOB-Day”=“Key”和“DOB-Month”=“Key”,但我遇到了一个问题,即如果某个人不知道某个DOB,则不会在结果中显示,因为相等联接会贴现空值

我在外部联接中需要什么,但是Microsoft query editor说我只能有一个外部联接,所以我只能引用其中一列

我显然不理解一些关键的东西,因为同一个表中的两列必须能够引用同一个第二个表。子查询可以解决这个问题吗


任何帮助都将不胜感激,如果你能帮我把它说出来那也太好了哈哈

您需要的不是等连接,而是左连接。左联接B。意味着它将显示表A中的所有内容,即使在表B中未找到查找值

SELECT T.Forename,T.Surname,Day.Value as DOBDay,Month.Values as DOBMonth,T.[DOB - Year]
FROM Test as T
LEFT JOIN CodeBook as Day ON Day.Key=T.[DOB - Day]
LEFT JOIN CodeBook as Month ON Month.Key=T.[DOB - Month]

分享你的尝试?根据您在问题文本中提到的内容,我假设您使用的是MS Sql Server。请同时指定预期结果。