在 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,但是是哪个?)...
最佳答案
你应该使用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
)
如果你打算经常使用它,最好做一个 View :
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'
关于sql - 在 2 个表中的一个中查找记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7527220/