PostgreSQL/Table/Composite Column

Материал из SQL эксперт
Перейти к: навигация, поиск

Insert value to composite column

   <source lang="sql">

postgres=# postgres=# CREATE TYPE inventory_item AS ( postgres(# name text, postgres(# supplier_id integer, postgres(# price numeric postgres(# ); CREATE TYPE postgres=# postgres=# CREATE TABLE on_hand ( postgres(# item inventory_item, postgres(# count integer postgres(# ); CREATE TABLE postgres=# postgres=# INSERT INTO on_hand VALUES (ROW("fuzzy dice", 42, 1.99), 1000); INSERT 0 1 postgres=# postgres=# select * from on_hand;

         item          | count

+-------
("fuzzy dice",42,1.99) |  1000

(1 row) postgres=# postgres=# SELECT (item).name FROM on_hand WHERE (item).price > 0.99;

   name

fuzzy dice

(1 row) postgres=# postgres=# drop table on_hand; DROP TABLE postgres=# drop type inventory_item; DROP TYPE postgres=# postgres=#

      </source>
   
  


Reference column name through table name

   <source lang="sql">

postgres=# postgres=# CREATE TYPE inventory_item AS ( postgres(# name text, postgres(# supplier_id integer, postgres(# price numeric postgres(# ); CREATE TYPE postgres=# postgres=# CREATE TABLE on_hand ( postgres(# item inventory_item, postgres(# count integer postgres(# ); CREATE TABLE postgres=# postgres=# INSERT INTO on_hand VALUES (ROW("fuzzy dice", 42, 1.99), 1000); INSERT 0 1 postgres=# postgres=# select * from on_hand;

         item          | count

+-------
("fuzzy dice",42,1.99) |  1000

(1 row) postgres=# postgres=# SELECT (on_hand.item).name FROM on_hand WHERE (on_hand.item).price > 0.99;

   name

fuzzy dice

(1 row) postgres=# postgres=# drop table on_hand; DROP TABLE postgres=# drop type inventory_item; DROP TYPE postgres=# postgres=# postgres=#

      </source>
   
  


To access a field of a composite column

   <source lang="sql">

postgres=# postgres=# CREATE TYPE inventory_item AS ( postgres(# name text, postgres(# supplier_id integer, postgres(# price numeric postgres(# ); CREATE TYPE postgres=# postgres=# CREATE TABLE on_hand ( postgres(# item inventory_item, postgres(# count integer postgres(# ); CREATE TABLE postgres=# postgres=# INSERT INTO on_hand VALUES (ROW("fuzzy dice", 42, 1.99), 1000); INSERT 0 1 postgres=# postgres=# select * from on_hand;

         item          | count

+-------
("fuzzy dice",42,1.99) |  1000

(1 row) postgres=# postgres=# postgres=# -- To access a field of a composite column postgres=# postgres=# postgres=# SELECT (item).name FROM on_hand WHERE (item).price > 9.99;

name

(0 rows) postgres=# postgres=# drop table on_hand; DROP TABLE postgres=# drop type inventory_item; DROP TYPE postgres=# postgres=#

      </source>