SELECT books.*, author1.*, author2.*
FROM books
LEFT JOIN author AS author1
ON author1.author_id = books.author_id
LEFT JOIN author AS author2
ON author2.author_id = books.secondary_author_id
В SQL вы можете псевдонизировать таблицы, добавив их после имени таблицы. Просто будьте осторожны, теперь у вас будут повторяющиеся столбцы, поэтому вместо author1. * Вы, вероятно, захотите присвоить результаты как author1, так и author2.
EDIT
Дополнительная информация - Скажем, у вас есть ваша основная таблица (я буду включать детали, так что если люди хотят, чтобы проверить на их собственной, они могут):
CREATE DATABASE test;
USE test;
CREATE TABLE books
(
book_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(50),
author_id INT NOT NULL,
secondary_author_id INT
);
CREATE TABLE authors
(
author_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
);
INSERT INTO authors (author_id,name) VALUES (1,'Sue Z. Que'),(2,'John Doe'),(3,'Bob Smith');
INSERT INTO books (book_id,title,author_id,secondary_author_id) VALUES (1,'JOIN-ing Two Tables',1,2);
Если вы сделать выбор, я упомянул выше, результат будет следующим:
|----------------------- books TABLE -----------------------------|---- authors table -----|---- authors table ---|
+---------+---------------------+-----------+---------------------+-----------+------------+-----------+----------+
| book_id | title | author_id | secondary_author_id | author_id | name | author_id | name |
+---------+---------------------+-----------+---------------------+-----------+------------+-----------+----------+
| 1 | JOIN-ing Two Tables | 1 | 2 | 1 | Sue Z. Que | 2 | John Doe |
+---------+---------------------+-----------+---------------------+-----------+------------+-----------+----------+
(я добавил верхний заголовок просто ради calrity), вы себе e у вас есть два имени author_id и two name (так как они объединяются в одну и ту же таблицу и те же имена столбцов). НО, если вы псевдоним столбцы из стыки так:
SELECT books.*, author1.name AS primary_author, author2.name AS secondary_author
FROM books
LEFT JOIN authors AS author1
ON author1.author_id = books.author_id
LEFT JOIN authors AS author2
ON author2.author_id = books.secondary_author_id;
Вы получаете более чистый результат:
|----------------------- books TABLE -----------------------------| authors table -|- authors table --|
+---------+---------------------+-----------+---------------------+----------------+------------------+
| book_id | title | author_id | secondary_author_id | primary_author | secondary_author |
+---------+---------------------+-----------+---------------------+----------------+------------------+
| 1 | JOIN-ing Two Tables | 1 | 2 | Sue Z. Que | John Doe |
+---------+---------------------+-----------+---------------------+----------------+------------------+
Проблема заключается в том, что есть таблица только один авторов. – Skilldrick 2010-12-09 15:51:27
Точно, и это будет `join`-ed дважды. Брэд Кристи объяснил это подробно. – 2010-12-09 15:54:38
Извините, я полностью неправильно прочитал его, спасибо – Skilldrick 2010-12-09 15:55:02