将来自不同列的行值合并到彼此重叠的一列:MySQL
Merge Row values from different columns to one column on top of each other: MySQL
我有 Table1 个列:
Fname,Sname
Table 2 列:
Fname,Lname
现在,在一个查询中,我想从这两个 table 中获取所有值(名字和姓氏 [Sname in table 1 is Lname])和 return 到一列。
基本上我想创建列来获取参与者列表,其中包括来自这两个 table 的每个人。
可能吗?
table 都通过第三个 table.
间接连接
您可以使用 UNION ALL
将给出来自两个 table 的所有行。
SELECT
Fname,
Sname,
CONCAT(Fname,Sname) AS FSname
FROM table1
UNION ALL
SELECT
Fname,
Lname,
CONCAT(Fname,Lname)
FROM table2;
列名取自第一个SELECT。
如果您使用 UNION
而不是 table2 中与 table1 重复的 UNION ALL
行将被省略,但它可以 运行 更慢,因为值有待比较。
您可以在两个 table 上使用第三个 table 和 LEFT JOIN
,并使用 COALESCE,其中 returns 第一个不为空的参数。
SELECT
COALESCE(t1.Fname,t2.Fname),
COALESCE(t1.Sname,t2.Lname),
CONCAT(
COALESCE(t1.Fname,t2.Fname),
COALESCE(t1.Sname,t2.Lname)
) AS FSname
FROM third_table t3
LEFT JOIN table1 t1
ON t1.id = t3.id
LEFT JOIN table2 t2
ON t2.id = te.id;
我有 Table1 个列:
Fname,Sname
Table 2 列:
Fname,Lname
现在,在一个查询中,我想从这两个 table 中获取所有值(名字和姓氏 [Sname in table 1 is Lname])和 return 到一列。
基本上我想创建列来获取参与者列表,其中包括来自这两个 table 的每个人。
可能吗?
table 都通过第三个 table.
您可以使用 UNION ALL
将给出来自两个 table 的所有行。
SELECT
Fname,
Sname,
CONCAT(Fname,Sname) AS FSname
FROM table1
UNION ALL
SELECT
Fname,
Lname,
CONCAT(Fname,Lname)
FROM table2;
列名取自第一个SELECT。
如果您使用 UNION
而不是 table2 中与 table1 重复的 UNION ALL
行将被省略,但它可以 运行 更慢,因为值有待比较。
您可以在两个 table 上使用第三个 table 和 LEFT JOIN
,并使用 COALESCE,其中 returns 第一个不为空的参数。
SELECT
COALESCE(t1.Fname,t2.Fname),
COALESCE(t1.Sname,t2.Lname),
CONCAT(
COALESCE(t1.Fname,t2.Fname),
COALESCE(t1.Sname,t2.Lname)
) AS FSname
FROM third_table t3
LEFT JOIN table1 t1
ON t1.id = t3.id
LEFT JOIN table2 t2
ON t2.id = te.id;