Если бы я искал такие данные, когда две таблицы связаны идентификатором третьей, я бы подумал об использовании внешних объединений.В комментариях к вопросу, на который вы ссылались, внешние объединения упоминались как возможное решение.Код для этого будет выглядеть следующим образом.
select a.name as account_Name,
p.description as property_DESCRIPTION,
p.address as property_ADDRESS,
v.description as vehicles_DESCRIPTION,
v.make as vehicles_MAKE,
v.model as vehicles_MODEL
from accounts a
left outer join properties p on p.accountid = a.accountid
left outer join vehicles v on v.accountid = a.accountid;
Вот как тестировалось решение.Сначала я создал три таблицы.
CREATE TABLE `accounts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE `properties` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`accountid` int(11) NOT NULL,
`description` varchar(255) COLLATE utf8_bin NOT NULL,
`address` varchar(255) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE `vehicles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`accountid` int(11) NOT NULL,
`description` varchar(255) COLLATE utf8_bin NOT NULL,
`make` varchar(100) COLLATE utf8_bin NOT NULL,
`model` varchar(100) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Затем я вставил данные в каждую таблицу.
INSERT INTO `demo`.`accounts` (
`accountid` ,
`name`
)
VALUES (
NULL , 'techport80.com'
);
INSERT INTO `demo`.`properties` (
`id` ,
`accountid` ,
`description` ,
`address`
)
VALUES (
NULL , '1', 'office', '123 may street');
INSERT INTO `demo`.`vehicles` (
`id` ,
`accountid` ,
`description` ,
`make` ,
`model`
)
VALUES (
NULL , '1', 'motorcycle', 'honda', 'shadow'
);
На этом этапе, если я протестирую решение, я получу одну строку с учетной записью,информация о собственности и транспортном средстве.
INSERT INTO `demo`.`vehicles` (
`id` ,
`accountid` ,
`description` ,
`make` ,
`model`
)
VALUES (
NULL , '1', 'passenger car', 'Ford', 'Mustang'
);
Теперь, если я проверяю свое решение, я вижу 2 ряда, по одному на каждое транспортное средство.Но два ряда не совсем дублируют.Хотя есть некоторые столбцы с теми же данными.В частности, информация об учетной записи.
INSERT INTO `demo`.`properties` (
`id` ,
`accountid` ,
`description` ,
`address`
)
VALUES (
NULL , '1', 'home', '321 yam street'
);
Затем я добавил второй адрес.Теперь четыре строки возвращены.Один для каждого транспортного средства и один для каждого адреса.Но все же, ни один из рядов не является дубликатом.
Наконец я добавил еще один автомобиль.Это должно было вызвать несбалансированность автомобиля и его свойств.
INSERT INTO `demo`.`vehicles` (
`id` ,
`accountid` ,
`description` ,
`make` ,
`model`
)
VALUES (
NULL , '1', 'Van', 'Chev', 'Cargo'
);
Теперь у нас есть 6 строк.Один на каждое транспортное средство и каждое транспортное средство также связано с двумя свойствами.(То есть 2 x 3)
Пройдя через это упражнение, мне интересно, будет ли иерархическое представление данных лучшей моделью для этих данных.Возможно, XML или JSON могут быть использованы для представления данных.Для этой задачи вы могли бы использовать хранимую функцию, но я лично сначала рассмотрел бы язык программирования, такой как PHP, C #, C ++ или множество других.
HTH