【问题标题】:Finding a record in one of 2 tables在 2 个表之一中查找记录
【发布时间】:2011-11-23 13:00:30
【问题描述】:

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

【问题讨论】:

    标签: sql postgresql outer-join join


    【解决方案1】:

    你应该使用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'
    

    【讨论】:

    • 有没有办法查看,记录来自哪个表?
    • 只需添加一个带有文字的新列:'tablename' 作为 originTable。 (我已经用这个编辑了答案)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    相关资源
    最近更新 更多