Поиск записи в одной из 2 таблиц - PullRequest
0 голосов
/ 23 сентября 2011

В базе данных 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 таблицу, но теперь внезапно меня просят искать в обеих таблицах.

Можно ли это сделать? Это полное внешнее соединение ? Я запутался, как указывать имена столбцов в моем запросе SQL (т.е. я должен добавить идентификатор таблицы, но какой именно?) ...

1 Ответ

4 голосов
/ 23 сентября 2011

Вы должны использовать 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'
...