从两个不同的表中选择两列,每个表具有不同的列名


Select two columns from two different tables each with different column names

我很难弄清楚这个查询。我使用的是PHP和postgresql9.1。我希望能够根据另一个字段中的标准从行中选择字段

A有列:

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

B有列:

pid, title, description, colx, coly

我想从两个表中搜索titledescription,如果找到匹配项,则返回它所在行的vidpid

到目前为止我尝试过的:

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 ) )

它没有给我表的正确列名。它只提供了第一个select语句的列名
此外,它只返回一个或另一个。如果在两者中都找到了值,我希望两个值都包含两列。

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

您可以编写以下内容:

SELECT 'vid' AS key, vid,  NULL AS pid FROM tableA WHERE title LIKE ...
UNION
SELECT 'pid',        NULL, pid         FROM tableB WHERE title LIKE ...

您所要求的内容不可能通过单个查询和UNION来实现。根据w3schools的说法,当使用UNION时,列必须与第一个select语句匹配。

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

尝试:-

   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 ...