簡體   English   中英

來自未嵌套的復合類型數組和常規列的組合SELECT

[英]Combined SELECT from unnested composite type array and regular column

我有一張桌子my_friends_cards

id | name    | rare_cards_composite[] |
---+---------+------------------------
1  | 'timmy' |  { {1923, 'baberuth'}, {1999, 'jeter'}}
2  |'jimmy'  |  { {1955, 'Joey D'}, {1995, 'juice_head'}}
3  |'bob'    |  {{2001, 'mo_jeter'}}

我想要這樣的請求:

Select name, (cards.x).player
FROM SELECT UNNEST(base_ball_card) as x
     FROM my_friends_cards
     WHERE name=ANY(['timmy', 'jimmy'])) as cards
WHERE (cards.x).year > 1990

(我知道未嵌套的復合數組中沒有“名稱”字段,這是行不通的。)

我感覺到我的復合類型數組列應該只是另一個表,然后我可以進行聯接,但是這周圍還有嗎?

我希望得到這樣的結果:

[('timmy', 'jeter')
,('jimmy', 'juice_head')]

版本:PostgreSQL 9.3.3

您的感覺是正確的:在許多方面,使用另一個表而不是復合類型數組的規范化架構將是更好的方法。

堅持使用不幸的設計時:

測試設置

(您應提供此信息。)

CREATE TYPE card AS (year int, cardname text);

CREATE TABLE my_friends_cards (id int, name text, rare_cards_composite card[]);

INSERT INTO my_friends_cards VALUES
  (1, 'timmy', '{"(1923,baberuth)","(1999,jeter)"}')
, (2, 'jimmy', '{"(1955,Joey D)","(1995,juice_head)"}')
, (3, 'bob'  , '{"(2001,mo_jeter)"}')
;

詢問

需要Postgres 9.3+。

SELECT t.name, c.cardname
FROM   my_friends_cards t
     , unnest(t.rare_cards_composite) c
WHERE t.name = ANY('{timmy,jimmy}')
AND   c.year > 1990;

SQL提琴。

暫無
暫無

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

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