簡體   English   中英

從2個表中選擇有條件綁定的列成一行

[英]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.

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