在 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

Modified SQL Fiddle

也怀疑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 在相关表中找到的数据的所有可能组合。根据需要进行调整。