From: Dag-Erling Smørgrav <des@des.no>
To: pgsql-sql@postgresql.org
Subject: Existential quantifier
Date: Sat, 10 Oct 2009 00:53:47 +0200
Message-ID: <86bpkgqiv8.fsf@ds4.des.no> (raw)
Consider the attached schema (filmstars.sql), which is a poorly designed
database of films and actors. The following query gives me a list of
films in which either Charlie or Martin Sheen starred:
select fs.film.title, fs.film.year
from fs.film left join fs.star on fs.film.id = fs.star.film
where fs.star.last = 'Sheen'
group by fs.film.title, fs.film.year;
Is there a way to do this without the "group by" clause?
DES
--
Dag-Erling Smørgrav - des@des.no
Attachments:filmstars.sql (text/plain, 2.2K) download
drop schema fs cascade;
create schema fs;
create table fs.film (
id serial not null primary key,
title varchar not null unique,
year integer not null
);
create table fs.star (
id serial not null primary key,
film integer not null references fs.film(id),
last varchar not null,
first varchar not null,
unique (film, last, first)
);
insert into fs.film(title, year) values ('Apocalypse Now', 1979);
insert into fs.star(film, last, first)
select id, 'Sheen', 'Martin' from fs.film where title = 'Apocalypse Now';
insert into fs.star(film, last, first)
select id, 'Brando', 'Marlon' from fs.film where title = 'Apocalypse Now';
insert into fs.star(film, last, first)
select id, 'Duvall', 'Robert' from fs.film where title = 'Apocalypse Now';
insert into fs.star(film, last, first)
select id, 'Ford', 'Harrison' from fs.film where title = 'Apocalypse Now';
insert into fs.film(title, year) values ('Blade Runner', 1982);
insert into fs.star(film, last, first)
select id, 'Ford', 'Harrison' from fs.film where title = 'Blade Runner';
insert into fs.star(film, last, first)
select id, 'Young', 'Sean' from fs.film where title = 'Blade Runner';
insert into fs.star(film, last, first)
select id, 'Hauer', 'Rutger' from fs.film where title = 'Blade Runner';
insert into fs.star(film, last, first)
select id, 'Hannah', 'Daryl' from fs.film where title = 'Blade Runner';
insert into fs.film(title, year) values ('Platoon', 1986);
insert into fs.star(film, last, first)
select id, 'Sheen', 'Charlie' from fs.film where title = 'Platoon';
insert into fs.star(film, last, first)
select id, 'Dafoe', 'Willem' from fs.film where title = 'Platoon';
insert into fs.star(film, last, first)
select id, 'Berenger', 'Tom' from fs.film where title = 'Platoon';
insert into fs.film(title, year) values ('Wall Street', 1987);
insert into fs.star(film, last, first)
select id, 'Douglas', 'Michael' from fs.film where title = 'Wall Street';
insert into fs.star(film, last, first)
select id, 'Sheen', 'Charlie' from fs.film where title = 'Wall Street';
insert into fs.star(film, last, first)
select id, 'Hannah', 'Daryl' from fs.film where title = 'Wall Street';
insert into fs.star(film, last, first)
select id, 'Sheen', 'Martin' from fs.film where title = 'Wall Street';
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-sql@postgresql.org
Cc: des@des.no
Subject: Re: Existential quantifier
In-Reply-To: <86bpkgqiv8.fsf@ds4.des.no>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox