从多个表中选择相似列

时间:2014-06-18 08:39:24

标签: sql postgresql

我的表格结构如下:

Computer:
    id serial,
    sbeadminlogin text,
    sbeadminfirstname text,
    sbeadminlastname text

Server:
    id serial,
    sbeadminlogin text,
    sapadminfirstname text,
    sapadminlastname text

这些表之间没有任何关系,但它们的列sbeadminlogin在两者中都命名相同。 Server表中管理员的人员也可能是存储在computer表中的其他设备的管理员。

我想在一个查询中从这些表创建所有管理员列表(仅限唯一行)。为了做到这一点,我使用了:

(select distinct sbeadminlogin from computer)
union
(select distinct sbeadminlogin from server)

直到我想添加名称和姓氏才能在结果中显示,直到我的效果很好:

(select distinct sbeadminlogin, sbeadminfirstname || ' ' || sbeadminlastname from computer)
union
(select distinct sbeadminlogin, saeadminfirstname || ' ' || saeadminlastname from server)

我收到错误消息,指出列saeadminfirstname不存在。

任何人都可以给我一个如何准备声明的提示,以便我从两个表中获得唯一的登录,第一个和最后一个名字吗?

3 个答案:

答案 0 :(得分:1)

我相信如果您放置正确的列名(带别名或不带别名),它将起作用:

(select sbeadminlogin, sbeadminfirstname || ' ' || sbeadminlastname as adminname from computer)
union
(select sbeadminlogin, sapadminfirstname || ' ' || sapadminlastname as adminname from server)

示例:SQLFiddle

答案 1 :(得分:0)

我认为你应该使用+''+连接两列而不是||。

离。

(从temp1中选择不同的名称+''+ city +''+ lastname) 联盟 (从temp2中选择不同的名称+''+ city +''+ lastname)

答案 2 :(得分:0)

尝试此查询并进行检查:

(select distinct sbeadminlogin, sbeadminfirstname || ' ' || sbeadminlastname 
from computer)
union
(select distinct sbeadminlogin, sapadminfirstname || ' ' || sapadminlastname 
from server)