У меня есть 2 таблицы с этой структурой:
CREATE TABLE `classi` (
`nome` char(50) NOT NULL DEFAULT '',
`padre` char(50) NOT NULL DEFAULT '',
`prop` int(11) NOT NULL DEFAULT '0',
`metodi` int(11) NOT NULL DEFAULT '0',
`descrizione` text,
PRIMARY KEY (`nome`),
UNIQUE KEY `nome` (`nome`),
UNIQUE KEY `padre` (`padre`,`nome`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE `prop` (
`classe` char(50) NOT NULL DEFAULT '',
`nome` char(50) NOT NULL DEFAULT '',
`tipo` char(1) NOT NULL DEFAULT '',
`valori` text,
`descrizione` text,
PRIMARY KEY (`classe`,`nome`),
UNIQUE KEY `speciale` (`classe`,`nome`),
UNIQUE KEY `nome` (`classe`,`nome`),
UNIQUE KEY `tipo` (`classe`,`tipo`,`nome`)
)
Вот правила для моего запроса:
- "classi" - это таблица MAIN, "prop" - это CHILDтаблица "classi" (отношение 1 к N на classi.nome -> prop.classe)
- Мне нужны ВСЕ записи в "classi" и ТОЛЬКО ПЕРВАЯ "СОВМЕСТНАЯ" ЗАПИСЬ "prop" (где prop.tipo = 'A', упорядочено по prop.tipo)
- Окончательный набор записей должен быть упорядочен по classi.nome
Это запрос, который я написал (и он работает):
SELECT c.nome, c.prop, c.metodi, p.nome AS pnome, p.tipo
FROM classi c
LEFT OUTER JOIN
(SELECT nome, classe, tipo FROM prop ORDER BY tipo) p
ON c.nome = p.classe
WHERE p.tipo = 'A'
GROUP BY c.nome
ORDER BY c.nome;
Итак, мой последний вопрос: возможно ли дополнительно оптимизировать этот запрос (например, избегая производной таблицы или другого предложения)?
ПожалуйстаУчтите, что любое решение должно быть после того, как оно применено на другом механизме БД (MSSQL, PostgreSQL, ecc.), поэтому мне нужно ANSI и переносимое решение (или «переводимое» решение).
Спасибозаранее за ваш ответ!