MySQL:使用单个列在单行中显示为多个选择列

时间:2016-05-25 07:28:02

标签: mysql sql

考虑这些示例表

enter image description here

enter image description here

表1中的E_id是主键。 From和Assign_to是用E_id引用的外键。

我想要显示一个这样的表:

enter image description here

我不确定如何实现它。请共享返回所需表的SQL查询。

2 个答案:

答案 0 :(得分:1)

你可以JOINTable1两次:

SELECT
    t2.work_name,
    t1f.E_name AS `From`,
    t1a.E_Name AS `Assign_to`
FROM Table2 t2
INNER JOIN Table1 t1f
    ON t1f.E_id = t2.`from`
INNER JOIN Table1 t1a
    ON t1a.E_id =t2.Assign_to

答案 1 :(得分:0)

您可以使用简单的临时表解决该问题。它不是最复杂的解决方法,但解决方案很容易理解。

步骤如下:

  • 使用table2

  • 中的所有数据创建一个表
  • 向该表添加2列以存储from和Assign_to的名称值

  • 使用table1

  • 中的名称值更新列
  • 选择您的数据

<强>的MySQL代码

-- create temp-table
CREATE TABLE table2_temp 
SELECT  * FROM  table2;

-- add columns to enrich table with E_name from table1
ALTER TABLE table2_temp 
 ADD COLUMN E_name_from VARCHAR (125),
 ADD COLUMN E_name_assign_to VARCHAR (125);

-- update temp-table with names from table1

 -- for E_name_from
UPDATE table2_temp A
INNER JOIN table1 B ON (A.`from` = E_id)
SET A.E_name_from = B.E_name;

 -- for E_name_assign_to
UPDATE table2_temp A
INNER JOIN table1.B ON (A.Assign_to = E_id)
SET A.E_name_assign_to = B.E_name;

-- now you can select your date from the temp-table
SELECT
    work_name,
    E_name_from AS `From`,
    E_name_assign_to AS `Assign_to`
FROM
    table2_temp;

-- drop table after work is done
drop table if exists table2_temp ;