Обсуждение: Database Views
Hi,
I’m a java developer and a novice Postgres user. I’m trying to create a view that will display common fields from several different tables to simplify some JDBC queries.
To illustrate my question, consider this example -- I have the following three tables:
CARS
TRUCKS
SUVS
Although the tables contain numerous columns each, they each contain the following columns in common:
Manufacturer
Identification Number
Color
I would like to create a view that will display this common information as well as a column called “Type” that will indicate what kind of record it is – eg Car, Truck, or SUV.
I’m not trying to create a view that merges multiple rows into a single row in the view, but instead a view that will display a subset of each row from the different tables. For example, if each of the individual tables contains 100 rows, the view would contain 300 rows.
I have no problem creating a view that queries a single table, but I get stuck when trying to pull multiple tables into the view.
Can this type of view be created? If so, can someone point me in the right direction – a keyword or syntax example would be appreciated.
Thanks,
gcj
gcj wrote:
> I have the following three tables: CARS TRUCKS SUVS
>
> Although the tables contain numerous columns each, they each contain the
> following columns in common:
>
> Manufacturer
> Identification Number
> Color
>
> I would like to create a view that will display this common information
> as well as a column called “Type” that will indicate what kind of record
> it is – eg Car, Truck, or SUV.
create table car (manufacturer varchar, vin varchar, color varchar);
create table truck (manufacturer varchar, vin varchar, color varchar);
create table suv (manufacturer varchar, vin varchar, color varchar);
insert into car values('Toyota','TTT', 'Silver');
insert into truck values('Mack','QQQ', 'Black');
insert into suv values('Lexxus','ZZZ', 'Yellow');
create or replace view vehicle as
select 'car' as type,manufacturer,vin,color from car
union
select 'truck' as type,manufacturer,vin,color from truck
union
select 'suv' as type,manufacturer,vin,color from suv
;
select * from vehicle;
type | manufacturer | vin | color
-------+--------------+-----+--------
car | Toyota | TTT | Silver
suv | Lexxus | ZZZ | Yellow
truck | Mack | QQQ | Black
Frank Bax <fbax@sympatico.ca> writes:
> create or replace view vehicle as
> select 'car' as type,manufacturer,vin,color from car
> union
> select 'truck' as type,manufacturer,vin,color from truck
> union
> select 'suv' as type,manufacturer,vin,color from suv
> ;
UNION ALL would be better, since it would stop the system from uselessly
trying to eliminate duplicate rows ...
regards, tom lane