Я довольно новичок в MySQL (от FileMaker) и борюсь с этим. Мне нужно создать список из базы данных MySQL, которая соответствует этому определению: Список всех записей из таблицы Children
, которые не имеют связанной записи в таблице Consultations
, где содержимое поля Category
отличается от first contact
.MySQL Выберите: найдите записи со связанными записями только одного типа
Таким образом, список должен включать детей без консультации, а также тех, кто имеет только консультации first contact
, но ничего больше.
Мое решение, похоже, работает, но очень медленно даже с небольшим набором записей образцов. Есть ли более простой и/или более быстрый способ сделать это?
Я попытался
SELECT
Chi.ID, Chi.Name
FROM
Children Chi JOIN Consultations Con ON Con.fk_Child = Chi.ID
WHERE
NOT EXISTS (SELECT * FROM Consultations WHERE fk_Child = Chi.ID AND Categorie != 'first contact')
GROUP BY
Chi.ID
Это относится ко всем остальным РСУБД. Это не совсем так с MySQL - по крайней мере исторически: http://explainextended.com/2009/09/18/not-in-vs-not-exists-vs-left-join-is-null-mysql/ – Strawberry
Теперь это намного проще, спасибо за помощь! – Nico
@Strawberry спасибо из замечания. Насколько я знаю, производительность в последних версиях mySQL намного лучше, я попытаюсь найти эталон и статью, которую я прочитал, так как, по моему мнению, запросы EXISTS теперь быстрее, чем LEFT JOINS. – vakata