Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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_Plsql_Left Join - Fatal编程技术网

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