我有一张名为"电子邮件"有2列," von"和" zu"。 两者都包含varchar(20)。我需要获取一个包含与特定名称匹配的每个String的表。例如: 电子邮件:
von | zu
---------------
Finn | John
Finn | Lisa
Eric | Finn
Eric | Lisa
现在我需要将每个匹配的名称都添加到" Finn"。结果应如下所示:
X
-------
John
Lisa
Eric
我的代码如下所示:
Select X from
(Select von as X from email where von = 'Finn'),
(Select zu as X from email where zu = 'Finn');
我收到以下错误:
#1248 - Every derived table must have its own alias
任何人都可以帮助我并告诉我我做错了什么吗? 问候,芬恩
答案 0 :(得分:1)
使用Union。这应该适用于你想要的东西。
Select von as X from email where von = 'Finn'
UNION ALL
Select zu as X from email where zu = 'Finn';
答案 1 :(得分:0)
这不是答案,而是澄清您自己的查询的作用。
Select X from
(Select von as X from email where von = 'Finn') von_finn,
(Select zu as X from email where zu = 'Finn') zu_finn;
(我已经添加了丢失的表别名。)
你正在使用20世纪80年代使用的旧连接sytax。现在我们指定我们正在使用的连接类型。如果表中没有连接条件,那就是交叉连接:
Select X
from (Select von as X from email where von = 'Finn') von_finn
cross join (Select zu as X from email where zu = 'Finn') zu_finn;
让我们看一下第一个子查询。您选择von
,其中von
是' Finn'。这肯定是一个错字,你真的想选择zu
。正确?这会给你收到芬兰电子邮件的人。对于第二个子查询,您可以获得向Finn发送电子邮件的所有人。交叉连接意味着:接收所有发送者并将它们与所有接收者组合(即获得所有组合)。使用您的样本数据:
zu_finn.x | von_finn.x ----------+----------- Eric | John Eric | Lisa
然后你显示x
。但是哪一个? zu_finn.x
或von_finn.x
? DBMS会抛出歧义错误(这可能更好),或者它会默默地决定一列,因此您要么显示Eric, Eric
或John, Lisa
。
小查询的许多错误:-)我以为我告诉你,所以你可以从中学习。