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

标签 sql postgresql outer-join join

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

它们具有完全相同的列名并包含由唯一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/

相关文章:

sql - 列重命名后函数调用失败(错误 42703 "column does not exist")

python - django shell 触发 Postgres 空闲事务问题

mysql - 从 MySQL 中的左连接中排除某些组合

symfony - 带有理论的查询构建器中的外部联接

java - java中如何访问外部类中的方法?

C# 使用多线程或并行执行执行 SQL SP

mysql - 创建函数时出现语法错误

mysql - 从表中获取字段 x 的值最大的行

mysql - 在 mysql 中使用 CAST 进行不正确的排序

sql - 根据与先前数据的差异更新数据