Это мой первый вопрос на этой странице и извините, если я не определен в некоторых вещах, или я не полностью объясняю себя, более того, английский не является моим родным языком, поэтому я могу сделать некоторые грамматические ошибки, поэтому я сожалею заранее.
Хорошо, я использую базу данных в MySQL, и у меня есть проблема с попыткой получить запрос и вернуть то, что я хочу, возможно потому, что моих знаний недостаточно...
Ну, у меня есть две таблицы, болезни и симптомы, которые имеют много разных отношений, то есть болезнь может иметь 1 или более симптомов и наоборот. Это приводит к созданию другой таблицы, которая связывает предыдущие две и это (таблица называется disease_diagnosis):
настольные болезни_диагностика
Хорошо, теперь возникает проблема, я хочу взять id_enfermedade, которая соответствует точным симптомам, которые я пропускаю (если у него есть еще один или один меньший симптом, он не должен возвращать эту болезнь), я имею в виду, что я только одна система для возвращения заболевание, которое соответствует точным симптомам, которые я вводил. Это реальная таблица, которую я получил:
Дело в том, что если я передаю симптомы 2 и 6, он должен вернуть это:
НО Я хочу, чтобы он просто возвращался, если совпадают точные симптомы, я имею в виду, что если другое заболевание с такими же симптомами плюс еще одно, система должна игнорировать его, например:
если мы пройдем: 1,2,3,4,5,6,7, он должен вернуть 6
но если мы пройдем 1,2,3,4,5,6, он должен вернуть нуль или пустую, потому что у них нет болезни с этими точными симптомами
Как я уже упоминал выше, мой уровень SQL очень низок и мешает мне приблизиться.
Это немного разочаровывает, когда я не могу справиться с вещами этого уровня, поэтому я надеюсь, что кто-то может мне помочь.
Один из методов - использовать group by
и having
следующее:
SELECT id_enfermedade
FROM disease_diagnosis
GROUP BY symptom_ID
HAVING SUM( symptom_ID IN (1, 2, 3) ) = 3 AND
SUM( symptom_ID NOT IN (1, 2, 3) ) = 0;
Кроме того, вы можете выразить HAVING
как:
HAVING GROUP_CONCAT(id_enfermedade ORDER BY id_enfermedade) = '1,2,3'
Это облегчает передачу в списке как одного параметра.
Не должно быть так, глядя на вашу структуру таблицы:
SELECT Top 1 id_enfermedade FROM disease_diagnosis WHERE id_sintoma IN (1, 2, 3);
Он вернет "а".
SELECT id_sintoma
ОТ болезнь_диагностики WHERE id_enfermedade = 'a'; Но это означало, что я хочу получить противоположный результат, например, что-то вроде этого: ВЫБЕРИТЕ id_enfermedade ОТ болезнь_диагностика ГДЕ id_sintoma = 1 И id_sintoma = 2 И id_sintoma = 3; и он должен вернуть одну строку с «а». но это не так