簡體   English   中英

從兩個不同的表中選擇兩個列,每個表具有不同的列名

[英]Select two columns from two different tables each with different column names

我在弄清楚這個查詢時遇到了麻煩。 我正在使用PHP和PostgreSQL 9.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 '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
  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 'id', 'isVid' as idType  FROM tableA WHERE title LIKE ...
    UNION
   SELECT pid as 'id', 'isPid' as idType  FROM tableB WHERE title LIKE ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM