Как я могу поднять заболевание из симптомов, которые это связало с этим в MySQL?

0

Это мой первый вопрос на этой странице и извините, если я не определен в некоторых вещах, или я не полностью объясняю себя, более того, английский не является моим родным языком, поэтому я могу сделать некоторые грамматические ошибки, поэтому я сожалею заранее.

Хорошо, я использую базу данных в MySQL, и у меня есть проблема с попыткой получить запрос и вернуть то, что я хочу, возможно потому, что моих знаний недостаточно...

Ну, у меня есть две таблицы, болезни и симптомы, которые имеют много разных отношений, то есть болезнь может иметь 1 или более симптомов и наоборот. Это приводит к созданию другой таблицы, которая связывает предыдущие две и это (таблица называется disease_diagnosis):

настольные болезни_диагностика

Хорошо, теперь возникает проблема, я хочу взять id_enfermedade, которая соответствует точным симптомам, которые я пропускаю (если у него есть еще один или один меньший симптом, он не должен возвращать эту болезнь), я имею в виду, что я только одна система для возвращения заболевание, которое соответствует точным симптомам, которые я вводил. Это реальная таблица, которую я получил:

Изображение 174551

Дело в том, что если я передаю симптомы 2 и 6, он должен вернуть это:

Изображение 174551

НО Я хочу, чтобы он просто возвращался, если совпадают точные симптомы, я имею в виду, что если другое заболевание с такими же симптомами плюс еще одно, система должна игнорировать его, например:

если мы пройдем: 1,2,3,4,5,6,7, он должен вернуть 6

но если мы пройдем 1,2,3,4,5,6, он должен вернуть нуль или пустую, потому что у них нет болезни с этими точными симптомами

Как я уже упоминал выше, мой уровень SQL очень низок и мешает мне приблизиться.

Это немного разочаровывает, когда я не могу справиться с вещами этого уровня, поэтому я надеюсь, что кто-то может мне помочь.

Теги:
database
select

2 ответа

2

Один из методов - использовать 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'

Это облегчает передачу в списке как одного параметра.

  • 0
    Спасибо Гордон, похоже, это больше подходит к тому, что я искал, я не могу проверить это прямо сейчас, как только я вернусь домой, я сообщу, решит ли это мою проблему. Спасибо большое за вашу помощь!
  • 0
    Но я хочу вернуть одну болезнь в соответствии с симптомами, которые я прохожу, так что не будет ли это так? \ n 'ВЫБЕРИТЕ id_enfermedade ОТ БОЛЕЗНИ_Диагноз ...' исправьте меня, если я ошибаюсь, но ваш запрос вернет симптом, верно? Я ищу болезнь
Показать ещё 6 комментариев
0

Не должно быть так, глядя на вашу структуру таблицы:

SELECT Top 1 id_enfermedade FROM disease_diagnosis WHERE id_sintoma IN (1, 2, 3);

Он вернет "а".

  • 0
    Окей, там у меня плохо, я скопировал / вставил его и забыл приспособиться к этому вопросу. Мой вставленный код должен выглядеть следующим образом: SELECT id_sintoma ОТ болезнь_диагностики WHERE id_enfermedade = 'a'; Но это означало, что я хочу получить противоположный результат, например, что-то вроде этого: ВЫБЕРИТЕ id_enfermedade ОТ болезнь_диагностика ГДЕ id_sintoma = 1 И id_sintoma = 2 И id_sintoma = 3; и он должен вернуть одну строку с «а». но это не так
  • 0
    Проверьте обновленный ответ
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню