抱歉,已经有一段时间没有使用SQL了。我有关于超级英雄的三张桌子。我想获得超级英雄的名字,并根据结果从Marvel或DC中检索电视名称。但是,当我应该每个名称只有一个条目时,在检索信息时查询将同时填充这两列。我的看法是:
CREATE VIEW `herotelly` AS
SELECT distinct(a.Name), b.Title as showname, c.Title
FROM superheroes a, marveltv b, dctv c
WHERE a.Name = b.Superhero or a.Name = c.Superhero;
但是结果是
"Superman" "Spidey Super Stories" "Adventures of Superman"
"Batman" "Spidey Super Stories" "Batman"
"Catwoman" "Spidey Super Stories" "Batman"
"Robin" "Spidey Super Stories" "Batman"
但是我只想要一个结果,例如在第一行中我只想要超人,第二列为空,然后第三列为结果。
非常感谢您的帮助。
尼尔。
答案 0 :(得分:1)
您正在marveltv
和dctv
之间创建叉积,然后从两者返回标题。不用一次连接两个表,而是使用两个单独连接中的UNION
。
SELECT a.name, b.title
FROM superheroes AS a
JOIN marveltv AS b ON a.name = b.superhero
UNION
SELECT a.name, b.title
FROM superheroes AS a
JOIN dctv AS b ON a.name = b.superhero
答案 1 :(得分:1)
此查询应为您提供所需的内容。如果没有样本数据,就很难确定……它使两个标题表分别UNION
,然后JOIN
进入超级英雄表:
CREATE VIEW `herotelly` AS
SELECT s.Name, t.Title
FROM superheroes s
JOIN (SELECT Superhero, Title FROM marveltv
UNION
SELECT Superhero, Title FROM dctv) t
ON s.Name = t.Superhero
答案 2 :(得分:0)
感谢此解决方案为我工作。尼尔
创建视图herotelly
为
SELECT s.Name,t.Title
来自超级英雄
加入(选择超级英雄,标题来自marveltv
联盟
SELECT超级英雄,标题来自dctv)t
ON s.Name = t.Superhero