在 SQL 中将 2 行连接成 1 行
Concatenate 2 rows into one in SQL
我有一个非常简单的数据结构,只有 3 个表:
- 请求
- 员工
- 团队
基本上,我需要的是将 2 个不同的 SQL 选择连接成一个(这样查询就可以 return 一行)。
如果有员工与请求相关联,则 return 他们的姓名(职务)并将其与“/”连接。
然后,如果有负责该请求的团队,return它的标题。
最后,将这 2 个属性连接成一个
我能做的最好的是:
(SELECT CONCAT(e.title, ' / ') FROM employees AS e
WHERE e.id = (SELECT r.resposible_employee_id FROM requests AS r WHERE r.id = 1))
UNION
(SELECT t.title FROM teams AS t
WHERE t.id = (SELECT r.responsible_team_id FROM requests AS r WHERE r.id = 1))
但它 return 是 2 行而不是一行
我可以通过两次查询数据库来单独进行串联,但这不是我要找的。我只想查询数据库一次。
为方便起见,这里有一个SQL Fiddle
查询应该return下面一行
John Doe / Johns team
提前致谢
你是不是在找下面这样的东西?
select
Concat_Ws(' / ',
(select title from employees e where e.id=r.resposible_employee_id),
(select title from teams t where t.id=r.responsible_team_id)
)
from requests r
where id=1
也怀疑respo(n)sible_employee_id是错字
您可以对相关表执行几个外部联接。例如:
SELECT
case when e.id is null
then coalesce(t.title, 'no information')
else case when t.id is null then e.title
else concat(r.resposible_employee_id, ' / ', t.title)
end
end
FROM requests r
LEFT JOIN employees e on e.id = r.resposible_employee_id
LEFT JOIN teams t on t.id = r.responsible_team_id
WHERE r.id = 1
结果:
2 / Johns team
请参阅 SQL Fiddle 中的 运行 示例。
SELECT
子句中的 CASE
表达式应说明 found/not 在相关表中找到的数据的所有可能组合。根据需要进行调整。
我有一个非常简单的数据结构,只有 3 个表:
- 请求
- 员工
- 团队
基本上,我需要的是将 2 个不同的 SQL 选择连接成一个(这样查询就可以 return 一行)。
如果有员工与请求相关联,则 return 他们的姓名(职务)并将其与“/”连接。
然后,如果有负责该请求的团队,return它的标题。
最后,将这 2 个属性连接成一个
我能做的最好的是:
(SELECT CONCAT(e.title, ' / ') FROM employees AS e
WHERE e.id = (SELECT r.resposible_employee_id FROM requests AS r WHERE r.id = 1))
UNION
(SELECT t.title FROM teams AS t
WHERE t.id = (SELECT r.responsible_team_id FROM requests AS r WHERE r.id = 1))
但它 return 是 2 行而不是一行
我可以通过两次查询数据库来单独进行串联,但这不是我要找的。我只想查询数据库一次。
为方便起见,这里有一个SQL Fiddle
查询应该return下面一行
John Doe / Johns team
提前致谢
你是不是在找下面这样的东西?
select
Concat_Ws(' / ',
(select title from employees e where e.id=r.resposible_employee_id),
(select title from teams t where t.id=r.responsible_team_id)
)
from requests r
where id=1
也怀疑respo(n)sible_employee_id是错字
您可以对相关表执行几个外部联接。例如:
SELECT
case when e.id is null
then coalesce(t.title, 'no information')
else case when t.id is null then e.title
else concat(r.resposible_employee_id, ' / ', t.title)
end
end
FROM requests r
LEFT JOIN employees e on e.id = r.resposible_employee_id
LEFT JOIN teams t on t.id = r.responsible_team_id
WHERE r.id = 1
结果:
2 / Johns team
请参阅 SQL Fiddle 中的 运行 示例。
SELECT
子句中的 CASE
表达式应说明 found/not 在相关表中找到的数据的所有可能组合。根据需要进行调整。