SQL表别名

时间:2016-12-22 15:40:01

标签: mysql sql database

我有一张名为"电子邮件"有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

任何人都可以帮助我并告诉我我做错了什么吗? 问候,芬恩

2 个答案:

答案 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.xvon_finn.x? DBMS会抛出歧义错误(这可能更好),或者它会默默地决定一列,因此您要么显示Eric, EricJohn, Lisa

小查询的许多错误:-)我以为我告诉你,所以你可以从中学习。