在2个表中的一个中查找记录

时间:2011-09-23 09:57:36

标签: sql postgresql outer-join join

在PostgreSQL 8.4.8数据库中,我有2个表: noreset track

他们有完全相同的列名并包含由唯一 id 标识的记录。

记录只能出现在其中一个表中,例如:

# select qdatetime, id, beta_prog, emailid, formfactor 
    from noreset where id='20110922124020305';
      qdatetime      |        id         | beta_prog |     emailid      | formfactor
---------------------+-------------------+-----------+------------------+------------
 2011-09-22 11:39:24 | 20110922124020305 | unknown   | 4bfa32689adf8189 | 21
(1 row)

# select qdatetime, id, beta_prog, emailid, formfactor
    from track where id='20110922124020305';
 qdatetime | id | beta_prog | emailid | formfactor
-----------+----+-----------+---------+------------
(0 rows)

我正在尝试提出一个连接语句,它会在其中一个表中找到 id 的记录。背景是我有一个PHP脚本,它总是使用1个表,但现在突然我被要求在两个表中搜索。

可以这样做吗?是full outer join吗?我很困惑如何在我的SQL查询中指定列名(即我必须预先添加一个表ID,但是哪一个?)...

1 个答案:

答案 0 :(得分:4)

您应该使用union

select qdatetime, id, beta_prog, emailid, formfactor, 'noreset' as tableOrigin
    from noreset where id='20110922124020305'
union
select qdatetime, id, beta_prog, emailid, formfactor, 'track' as tableOrigin
    from track where id='20110922124020305'

union删除重复的行,如果您想全部使用union all

如果你经常使用这个,那么最好是一个观点:

CREATE VIEW yourviewname as 
select qdatetime, id, beta_prog, emailid, formfactor, 'noreset' as tableOrigin
    from noreset
union
select qdatetime, id, beta_prog, emailid, formfactor, 'track' as tableOrigin
    from track

然后你的查询将是:

SELECT qdatetime, id, beta_prog, emailid, formfactor
  FROM yourviewname
 WHERE id='20110922124020305'