Я пытаюсь получить данные из трех разных таблиц одновременно, и я не думаю, что я правильно понимаю объединения, так как я не получаю быстрых результатов.
Например, предположим, что таблицы houses
sellers
и 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
;если такой строки нет, верните комбинацию «дом и продавец», как показано в примере выше.