Выберите два столбца из двух разных таблиц с разными именами столбцов - PullRequest
0 голосов
/ 09 марта 2012

У меня проблемы с выяснением этого запроса. Я использую PHP и Postgresql 9.1. Я хочу иметь возможность выбирать поля из строк на основе критериев в другом поле, например так.

Таблица A имеет столбцы:

vid, title, description, col4, col5, col6, col7

Таблица B имеет столбцы:

pid, title, description, colx, coly

Я хочу найти title и description в обеих таблицах и, если совпадение найдено, вернуть vid или pid строки, в которой оно было найдено.

Что я пробовал до сих пор:

SELECT vid FROM tableA WHERE title LIKE %somevalue%
UNION
SELECT pid FROM tableB WHERE title LIKE %somevalue%

Проблема в том, что когда я делаю это, он находит совпадение для tableB, которое возвращает правильное значение, но назначается столбцу vid в массиве. В массиве php отображается

Array ( [0] => Array ( [vid] => 100007 ) )

Когда это должно быть

Array ( [0] => Array ( [pid] => 100007 ) )

Это не дает мне правильное имя столбца для таблицы. Это только дает мне имя столбца первого оператора выбора.
Кроме того, он возвращает только один или другой. Если значение найдено в обоих, я хочу оба значения с обоими столбцами.

Ответы [ 4 ]

1 голос
/ 09 марта 2012
SELECT
  a.vid,
  b.pid
FROM (
  SELECT vid, ROW_NUMBER() OVER (ORDER BY vid) AS rn
  FROM tableA
  WHERE title LIKE '%somevalue%'
) a
FULL JOIN (
  SELECT pid, ROW_NUMBER() OVER (ORDER BY pid) AS rn
  FROM tableB
  WHERE title LIKE '%somevalue%'
) b
ON a.rn = b.rn
1 голос
/ 09 марта 2012

То, что вы просите, невозможно с помощью одного запроса и UNION. Согласно w3schools, столбцы должны соответствовать первому оператору выбора при использовании UNION.

http://www.w3schools.com/sql/sql_union.asp

1 голос
/ 09 марта 2012

Вы можете написать что-то вроде:

SELECT 'vid' AS key, vid,  NULL AS pid FROM tableA WHERE title LIKE ...
UNION
SELECT 'pid',        NULL, pid         FROM tableB WHERE title LIKE ...
0 голосов
/ 09 марта 2012

Попробуйте: -

   SELECT vid as 'id', 'isVid' as idType  FROM tableA WHERE title LIKE ...
    UNION
   SELECT pid as 'id', 'isPid' as idType  FROM tableB WHERE title LIKE ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...