Объединение нескольких источников данных
Листинг 4.39. Объединение нескольких источников данных
booktown=# SELECT a.last_name, p.name AS publisher, e.isbn, s.subject
booktown-# FROM ((((authors AS a INNER JOIN books AS b</userinput>
booktown(# ON (a.id = b.author_id))</userinput>
booktown(# INNER JOIN editions AS e ON (e.book_id = b.id))
booktown(# INNER JOIN publishers AS p ON (p.id = e.publisher_id))
booktown(# INNER JOIN subjects AS s ON (s.id = b.subjected));
1ast_name | publisher | isbn | subject
Hogarth | Watson-Guptill Publications | 0823015505 | Arts
Brown | HarperCollins | 0694003611 | Children's Books
Geisel | Random House | 0394800753 | Children's Books
Geisel | Random House | 039480001X | Children's Books
Geisel | Random House | 0394900014 | Children's Books
Bourgeois | Kids Can Press | 0590445065 | Children's Books
Bianco | Penguin | 0679803335 | Classics
Lutz | O'Reilly & Associates | 0596000855 | Computers
Alcott | Henry Holt & Company. Inc. | 0760720002 | Drama
Рое | Mojo Press | 1885418035 | Horror
Рое | Books of Wonder | 0929605942 | Horror
King | Doubleday | 0451160916 | Horror
King | Doubleday | 0385121679 | Horror
Clarke | Roc | 0451457994 | Science Fiction
Clarke | Roc | 0451198492 | Science Fiction
Herbert | Ace Books | 0441172717 | Science Fiction
Herbert | Ace Books | 044100590X | Science Fiction
(17 rows)
В листинге 4.39 можно заметить одно любопытное обстоятельство: хотя таблица books участвует в объединении, ни одно из ее полей не входит в итоговый набор. Включение таблицы books в секции JOIN предоставляет критерии для объединения других таблиц. Все таблицы, поля которых возвращаются в результате запроса, связываются с другими таблицами через поле id таблицы books (кроме таблицы publishers, которая связывается с таблицей editions по полю publisher_id).