[英]Select conditionally bound columns from 2 tables into one line
我進行了搜索,但似乎找不到合適的關鍵字來描述我要實現的目標,因此,如果這是一個已知問題,請寬容,只需將我指向正確的關鍵字即可。
我有以下表格/條目:
select * from personnes where id=66;
id | aclid | referendid | login | validated | passwd
66 | | | toto@tiiti.com | f | $2y$10$w3DRh/g2Tebu/mkMcQz32OUB.dDjFiBP99vWlMrrPWpR45JZDdw4W
和
select * from pattributs where (name='nom' OR name='prenom') AND persid=66;
id | name | value | persid
----+--------+-------+--------
90 | prenom | Jean | 66
91 | nom | Meyer | 66
現在,我使用該表格來使主表不混亂,因為根據情況,我是否記錄名稱。
但是將視圖作為已完成表的表會很好,所以我嘗試了以下操作:
select (personnes."id","login",
(select "value" from pattributs where "name"='nom' AND "persid"=66),
(select "value" from pattributs where "name"='prenom' AND "persid"=66)
) from personnes where personnes.id=66;
這似乎可以做到:
row
--------------------------------
(66,toto@tiiti.com,Meyer,Jean)
但是列標記消失了,能夠從調用php腳本中獲取它們非常有用,但是當我添加時:
select (personnes."id","login",
(select "value" from pattributs where "name"='nom' AND "persid"=66),
(select "value" from pattributs where "name"='prenom' AND "persid"=66) as 'prenom')
from personnes where personnes.id=66;
我在as指令處收到語法錯誤...因此,我可能不了解如何正確執行此操作,大括號表示這已不再以表格形式出現),那么如何獲得以下結果:
id | login | nom | prenom
66 |toto@tiiti.com | Meyer | Jean
想法是為每個用例存儲一個合適的視圖,僅捆綁相關列。
提前致謝
回答您的問題:因為創建一個簡單的數據集(一行),所以您失去了列名。 這是由您的大括號完成的。 沒有它們,您應該會得到預期的結果。
但是您的解決方案不是很好:您應該避免在每個子查詢中計算單個列。 可以通過一個SELECT
輕松完成:
select
pe.id,
pe.login,
MIN(pa.value) FILTER (WHERE pa.name = 'nom') as nom,
MIN(pa.value) FILTER (WHERE pa.name = 'prenom') as prenom
from
personnes pe
join pattributs pa ON pe.id = pa.persid AND pe.id = 66
where pa.name = 'nom' or pa.name = 'prenom'
group by pe.id, pe.login
首先,您需要JOIN
才能將兩個表的正確數據集組合在一起。 您應該加入id
。
然后,您會遇到一個問題,即該名稱有兩行(看起來設計得不太好,為什么沒有兩列?)。 這兩個值可以按id
分組。 現在您可以匯總它們。
我正在做的是“聚合”它們(我使用什么功能都沒有關系,因為它應該只是一個值)。 FILTER
子句過濾出正確的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.