我无法搞清楚这个查询。我正在使用PHP和postgresql 9.1。我希望能够根据其他字段中的条件从行中选择字段。
表A
包含列:
vid, title, description, col4, col5, col6, col7
表B
包含列:
pid, title, description, colx, coly
我想从两个表中搜索title
和description
,如果找到匹配项,请返回找到的行的vid
或pid
。< / p>
到目前为止我尝试过:
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语句的列名 此外,它只返回一个或另一个。如果在两者中找到该值,我希望两个值都包含两个值。
答案 0 :(得分:1)
你可以这样写:
SELECT 'vid' AS key, vid, NULL AS pid FROM tableA WHERE title LIKE ...
UNION
SELECT 'pid', NULL, pid FROM tableB WHERE title LIKE ...
答案 1 :(得分:1)
单个查询和UNION无法满足您的要求。根据w3schools,当你使用UNION时,列被强制匹配第一个select语句。
答案 2 :(得分:1)
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
答案 3 :(得分:0)
尝试: -
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 ...