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