SQL使用条件连接两个表中的相同信息
我有一个带有人物特征的主表SQL使用条件连接两个表中的相同信息,sql,join,plsql,left-join,Sql,Join,Plsql,Left Join,我有一个带有人物特征的主表t,我想将其他两个表m和n中的出生日期信息连接到该主表中,从而在表t中创建列birth\u date。我要加入的关键变量是ID,它出现在所有三个表中 我遇到的问题是,表t包含变量age,只有当t.age=18时才会加入。 我现在得到的是: select t.*, m.birth_date as birth_date_1, n.birth_date as birth_date_2 from t left join m on (t.ID = m.
t
,我想将其他两个表m
和n
中的出生日期信息连接到该主表中,从而在表t
中创建列birth\u date
。我要加入的关键变量是ID
,它出现在所有三个表中
我遇到的问题是,表t
包含变量age
,只有当t.age<18
时,我才想加入表m
中的出生日期,而表n
中的出生日期只有当t.age>=18
时才会加入。
我现在得到的是:
select t.*,
m.birth_date as birth_date_1,
n.birth_date as birth_date_2
from t
left join m
on (t.ID = m.ID and t.age < 18)
left join n
on (t.ID = n.ID and t.age >= 18);
选择t.*,
m、 出生日期作为出生日期1,
n、 出生日期作为出生日期2
从t
左连接m
on(t.ID=m.ID和t.age<18岁)
左连接n
on(t.ID=n.ID,t.age>=18);
这似乎可行,但是,我创建了两列
birth\u date\u 1
和birth\u date\u 2
。如何在这一列中执行此操作选择仅创建一列出生日期
?您可以
SELECT
[...],
COALESCE(m.birth_date, n.birth_date) AS birth_date,
[...]
我如何在这一选择中做到这一点,以仅创建一列出生日期 因为对于源表中的每个记录,最多有一个左连接会成功,所以您可以使用
coalesce()
:
选择t.*,合并(m.birth\u date,n.birth\u date)作为出生日期
从t
左连接t.ID上的m=m.ID和t.age<18
t.ID=n.ID和t.age>=18上的左连接n
旁注:连接条件周围的括号是多余的。如果我已经在为
m.birth\u date
使用coalesce:coalesce(m.birth\u date\u final,m.birth\u date\u orig)作为birth\u date\u 1
?那么我可以在另一个聚结中使用聚结吗<代码>合并(合并(m.birth\u date\u final,m.birth\u date\u orig),n.birth\u date)作为出生日期是。由于COALESCE
采用多个参数,您甚至可以将(m.birth\u date\u final,m.birth\u date\u orig,n.birth\u date)合并为birth\u date
“在这个范围内执行此操作,选择仅创建一列”不清楚。要从中选择的每一行都有具有特定值的特定列。你想从这样一行中得到什么结果?使用足够多的单词、句子和引用部分示例,以清楚、完整地表达您的意思。请在代码问题中给出一个--cut&paste&runnable代码;示例输入(作为初始化代码)以及所需和实际输出(包括逐字错误消息);标签和版本;清晰的说明和解释。对于包含最少代码的错误,您可以给出“显示为OK”的代码,并通过“显示为not OK”的代码进行扩展。(调试基础。)用于包含DBMS和DDL的SQL,其中包括约束、索引和表格初始化。
select t.*, coalesce(m.birth_date, n.birth_date) as birth_date
from t
left join m on t.ID = m.ID and t.age < 18
left join n on t.ID = n.ID and t.age >= 18