MySQL Joins - получение всех данных из 3 таблиц - PullRequest
0 голосов
/ 10 февраля 2011

Я пытаюсь получить данные из трех разных таблиц одновременно, и я не думаю, что я правильно понимаю объединения, так как я не получаю быстрых результатов.
Например, предположим, что таблицы housessellers и selling_details.houses и sellers связаны selling_details: он имеет seller_id и house_id, а также дополнительную информацию, такую ​​как цена, и ссылку на пользователя.

Я хочусоздать запрос, который возвращает все дома в системе, сопоставить их со всеми продавцами и перечислить детали продажи, если таковые имеются.Например:

+------------+-------------+-------------------------+----------------------+-----------+
| house.name | seller.name | selling_details.details | selling_details.date | user.name |
+------------+-------------+-------------------------+----------------------+-----------+
| One        | One         | details                 | 2011-02-18           | bobby     |
| One        | Two         | details                 | 2011-02-24           | frank     |
| One        | Three       | NULL                    | NULL                 | NULL      |
| One        | Four        | NULL                    | NULL                 | NULL      |
| Two        | One         | details                 | 2011-01-16           | ned       |
| Two        | Two         | NULL                    | NULL                 | NULL      |
| Two        | Three       | details                 | 2011-02-12           | will      |
| Two        | Four        | NULL                    | NULL                 | NULL      |
+------------+-------------+-------------------------+----------------------+-----------+

Какой самый простой способ это сделать?

Редактировать: Кажется, я пытаюсь упростить проблему, поэтому вот некоторые подробности:

Вот небольшая часть схемы, которую я использую:

create table `house` (`id` int not null auto_increment, `name` varchar(255) null, primary key (`id`))
create table `seller` (`id` int not null auto_increment, `name` varchar(255) null, primary key (`id`))
create table `user` (`id` int not null auto_increment, `name` varchar(255) null, primary key (`id`))
create table `selling_details` (`id` int not null auto_increment, `details` varchar(255) not null, date datetime not null, `house_id` int null, `seller_id` int null, `user_id` int not null, primary key (`id`))

alter table `selling_details` add index `FK_selling_details_user` (`user_id`), add constraint `FK_selling_details_user` foreign key (`user_id`) references `user` (`id`)
alter table `selling_details` add index `FK_selling_details_house` (`house_id`), add constraint `FK_selling_details_house` foreign key (`house_id`) references `house` (`id`)
alter table `selling_details` add index `FK_selling_details_seller` (`seller_id`), add constraint `FK_selling_details_seller` foreign key (`seller_id`) references `seller` (`id`)

Теперь, чтобы усложнить задачу, в таблице selling_details может быть много строксвязывание house и seller.Если присутствует одна или несколько из этих строк, я хочу только ту, которая имеет самую последнюю date;если такой строки нет, верните комбинацию «дом и продавец», как показано в примере выше.

1 Ответ

0 голосов
/ 10 февраля 2011

Перекрестите объединение дома и продавцов, затем оставьте объединение, чтобы найти какие-либо детали для комбинации

select h.house_id, s.seller_id, sd.details
from houses h
cross join sellers s
left join selling_details sd
    on sd.seller_id = s.seller_id
    and sd.house_id = h.house_id
order by h.house_id, s.seller_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...