MySQL-仅根据值从一个表填充

时间:2018-12-08 02:06:11

标签: mysql

抱歉,已经有一段时间没有使用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"

但是我只想要一个结果,例如在第一行中我只想要超人,第二列为空,然后第三列为结果。

非常感谢您的帮助。

尼尔。

3 个答案:

答案 0 :(得分:1)

您正在marveltvdctv之间创建叉积,然后从两者返回标题。不用一次连接两个表,而是使用两个单独连接中的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