在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,但是哪一个?)...
答案 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'