![](/img/trans.png)
[英]SELECT from two tables WHERE different columns in each table equal $id ORDER BY common column (PHP/MySQL)
[英]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
我想從兩個表中搜索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 ) )
它沒有為我提供該表的正確列名。 它只給我第一個選擇語句的列名。
同樣,它僅返回一個或另一個。 如果在兩個值中都找到了值,則我希望兩個列都具有兩個值。
您可以這樣寫:
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語句。
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.