Пытаюсь составить запрос в бд mysql. В бд есть таблицы label_person
(метки) и answers
(ответы). И таблица people
(люди), к которой они относятся.
У Людей
(конкретно одного человека) может не быть записей в таблицах Ответы
и Метки
. Мне же нужно получить все данные, а если Ответа
или Метки
нет - оставить поле пустым.
Составил запрос, выполняю - пусто, не возвращает ни одной строчки. Если удалить из запроса таблицу label_person
, то всё работает. Что я делаю не так?
SELECT
CONCAT(prefixes.name, samples.number) AS sample_number,
CONCAT(genes.name, polfzms.name) AS polfzm,
CONCAT(alleles.name, '/', alleles_1.name) AS allelic_variant,
questions.text,
answers.value,
people.surname,
people.first_name,
people.middle_name,
people.birth_date,
people.gender,
people.id AS person_id,
labels.name AS label_name
FROM samples
INNER JOIN prefixes
ON samples.prefix_id = prefixes.id
INNER JOIN providers
ON samples.provider_id = providers.id
INNER JOIN polfzm_sample
ON polfzm_sample.sample_id = samples.id
INNER JOIN polfzms
ON polfzm_sample.polfzm_id = polfzms.id
INNER JOIN genes
ON polfzms.gene_id = genes.id
INNER JOIN genotypes
ON polfzm_sample.genotype_id = genotypes.id
INNER JOIN alleles
ON genotypes.l_allele_id = alleles.id
INNER JOIN alleles alleles_1
ON genotypes.r_allele_id = alleles_1.id
INNER JOIN people
ON samples.person_id = people.id
LEFT OUTER JOIN answers
ON answers.person_id = people.id
INNER JOIN questions
ON answers.question_id = questions.id
LEFT OUTER JOIN label_person
ON label_person.person_id = people.id
INNER JOIN labels
ON label_person.label_id = labels.id
WHERE label_person.label_id IN (5)
GROUP BY CONCAT(prefixes.name, samples.number),
CONCAT(genes.name, polfzms.name),
CONCAT(alleles.name, '/', alleles_1.name),
questions.text,
answers.value,
people.surname,
people.first_name,
people.middle_name,
people.birth_date,
people.gender,
people.id,
labels.name
Нужно условие по label_person
переместить в ON
(так как в WHERE он превращает связь фактически в INNER JOIN), а также заменить INNER JOIN labels
на LEFT OUTER JOIN labels
(поскольку вы идете к ним через LEFT OUTER).
SELECT
CONCAT(prefixes.name, samples.number) AS sample_number,
CONCAT(genes.name, polfzms.name) AS polfzm,
CONCAT(alleles.name, '/', alleles_1.name) AS allelic_variant,
people.surname,
people.first_name,
people.middle_name,
people.birth_date,
people.gender,
people.id AS person_id,
labels.name
FROM samples
INNER JOIN prefixes
ON samples.prefix_id = prefixes.id
INNER JOIN providers
ON samples.provider_id = providers.id
INNER JOIN polfzm_sample
ON polfzm_sample.sample_id = samples.id
INNER JOIN polfzms
ON polfzm_sample.polfzm_id = polfzms.id
INNER JOIN genes
ON polfzms.gene_id = genes.id
INNER JOIN genotypes
ON polfzm_sample.genotype_id = genotypes.id
INNER JOIN alleles
ON genotypes.l_allele_id = alleles.id
INNER JOIN alleles alleles_1
ON genotypes.r_allele_id = alleles_1.id
INNER JOIN people
ON samples.person_id = people.id
LEFT OUTER JOIN label_person
ON label_person.person_id = people.id
AND label_person.label_id IN (5)
LEFT OUTER JOIN labels
ON label_person.label_id = labels.id
GROUP BY CONCAT(prefixes.name, samples.number),
CONCAT(genes.name, polfzms.name),
CONCAT(alleles.name, '/', alleles_1.name),
people.surname,
people.first_name,
people.middle_name,
people.birth_date,
people.gender,
people.id,
labels.name
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Имеется такая команда в ansible, которая импортирует в базу mysql какие-то таблицыПомогите сделать условие проверки существования таблицы перед...
Программа разработана в visual studio С# она работает с СУБД MySQLКак при помощи Setup Project создать инсталятор который кроме самой программы устанавливал...
Имеется таблица переписки между пользователями такого типа
Пытаюсь реализовать запрос, в котором хочу вывести ФИО работника, который выполнил самое большое количество заказов (объектов)