mysql - 如何创建两个具有空值的表的并集?

标签 mysql join union

我有两个 MySQL 表“ucharacters”和“uplaces”,它们都有“ucharacter”列。两个表中的 ucharacter 列之间存在一些重叠,但有些值对于每个表来说都是唯一的。每个表还具有“episode”和“line”列,但“uplaces”表还具有“place”列。这将创建此架构的简单版本:

CREATE TABLE ucharacters (
  ucharacter VARCHAR(50),
  episode INT(2),
  line INT(6)
  );

CREATE TABLE uplaces (
  ucharacter VARCHAR(50),
  episode INT(2),
  line INT(6),
  place VARCHAR(40)
  );

INSERT INTO ucharacters VALUES ('Molly', 4, 123);
INSERT INTO ucharacters VALUES ('Leo', 5, 567);
INSERT INTO uplaces VALUES ('Leo', 5, NULL, 'Athens');

我想从组合这些的临时表中进行选择,以便它保留每个表中的每一行,并根据需要使用 NULL 值。结果如下:

UCHARACTER  EPISODE LINE PLACE
Molly       4       123  NULL
Leo         5       567  NULL
Leo         7       NULL Athens

现在这是我的代码:

SELECT tabkey.ucharacter, 

ucharacters.episode, ucharacters.line, 

uplaces.episode, uplaces.line, uplaces.place

FROM 

(SELECT ucharacters.ucharacter FROM ucharacters
 UNION ALL
 SELECT uplaces.ucharacter FROM uplaces) as tabkey

LEFT JOIN

ucharacters on tabkey.ucharacter = ucharacters.ucharacter

LEFT JOIN

uplaces on tabkey.ucharacter = uplaces.ucharacter;

这对于第一行 (Molly, 4, 123, NULL) 效果很好,但随后给出了两行相同的 (Leo, 5, 567, Athens),组合了两个表。我怎样才能得到上面输入的结果?

http://sqlfiddle.com/#!2/a7013e/1

谢谢!

最佳答案

I want to select from a temporary table that combines these, so that it preserves every line > from each table, with NULL values as appropriate. The result would look like:

如果这就是您想要做的,您能不能简单地使用下面的查询?

SELECT ucharacter, episode, line, null FROM ucharacters
UNION ALL
SELECT ucharacter, episode, line, place FROM uplaces;

http://sqlfiddle.com/#!2/a7013e/17/0

关于mysql - 如何创建两个具有空值的表的并集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25373992/

相关文章:

php - 使用php查询mysql记录并转换为数组

php - PDO - 根据 3 个值检测到重复时插入新行

php - mysql连接以列出两个表中的项目

mysql - 分层父子关系。自加入或并集或两者兼而有之?

java interscect, union, join, distinct 列表与谓词

mysql - 如何查找 12 月底即将到来的生日?

mysql - rails : Selecting user comments for the last day

Mysql union/join 多列帮助

java - 在 Hibernate 中连接表

mysql UNION 命名表属性