首页 > 解决方案 > 根据它们来自的表,从具有真/假值的不同表中收集所有行

问题描述

如果我有这些不同的表:

Participants_1
name   | age
James  | 18

Participants_2
name   | age
Daniel | 20
James  | 18

我怎样才能将它插入到这样的另一个表中?

All_Participants
name   | age | in_participants_1 | in_participants_2
James  | 18  | 1                 | 1
Daniel | 20  | 0                 | 1

所以基本上All_Participants表是来自其他 Participants 表的所有行的集合,以及is_participants_*是否来自特定表的附加字段。

标签: mysqlsql

解决方案


你需要一个UNION ALLwith GROUP BY

-- INSERT INTO ...
SELECT name, age, MAX(in_participants_1), MAX(in_participants_2)
FROM (
  SELECT name, age, 1 AS in_participants_1, 0 AS in_participants_2 FROM participants_1
  UNION ALL
  SELECT name, age, 0,                      1                      FROM participants_2
) AS u
GROUP BY name, age

理想情况下,您会将所有参与者存储在一张表中,并将他们的 ID 存储在参与者 1 和 2 表中。或者更好的是,创建一个存储参与者 ID 和事件 ID 的参与表。


推荐阅读