Нужна помощь в возвращении уникальных результатов в MySQL - PullRequest
1 голос
/ 12 июля 2011

У меня возникли проблемы, и мне нужна помощь в поиске правильного запроса SQL.Вот мой код:

SELECT firstname, lastname, date_of_birth 
  FROM `data` 
 WHERE firstname IN (SELECT firstname 
                       FROM `data` 
                      WHERE diagnosis_location = 'Mayo') 
   AND lastname IN (SELECT lastname 
                      FROM `data` 
                     WHERE diagnosis_location = 'Mayo') 
   AND date_of_birth IN (SELECT date_of_birth 
                           FROM `data` 
                          WHERE diagnosis_location = 'Mayo') 
   AND firstname IN (SELECT firstname 
                       FROM `data` 
                      WHERE diagnosis_location = 'Lahey') 
   AND lastname IN (SELECT lastname 
                      FROM `data` 
                     WHERE diagnosis_location = 'Lahey') 
   AND date_of_birth IN (SELECT date_of_birth 
                           FROM `data` 
                          WHERE diagnosis_location = 'Lahey')

Да, это монстр запроса и, вероятно, не такой уж эффективный.Но то, что я пытаюсь сделать, - это вернуть только имя, фамилию и дату рождения всех пациентов с диагнозом как в «Мейо», так и в «Лахе».Этот запрос возвращает этих пациентов, но возвращает несколько строк с одинаковыми точными данными.

Как я могу ограничить его, чтобы дубликаты одинаковых точных результатов были обрезаны?

Ответы [ 3 ]

2 голосов
/ 12 июля 2011

Использование:

  SELECT firstname, lastname, date_of_birth 
    FROM `data`
   WHERE diagnosis_location IN ('Mayo', 'Lahey')
GROUP BY firstname, lastname, date_of_birth 
  HAVING COUNT(DISTINCT diagnosis_location) = 2
1 голос
/ 12 июля 2011

Вам лучше взглянуть на использование EXISTS для чего-то подобного

Может быть, попробовать что-то вроде

SELECT  DISTINCT
        firstname, 
        lastname, 
        date_of_birth 
FROM    `data` d
WHERE   EXISTS  (
                        SELECT  *
                        FROM    `data` dE
                        WHERE   d.firstname = dE.firstname
                        AND     d.lastname = dE.lastname
                        AND     d.date_of_birth = dE.date_of_birth
                        AND     diagnosis_location ='Mayo'
                )
AND     EXISTS  (
                        SELECT  *
                        FROM    `data` dE
                        WHERE   d.firstname = dE.firstname
                        AND     d.lastname = dE.lastname
                        AND     d.date_of_birth = dE.date_of_birth
                        AND     diagnosis_location = 'Lahey'
                )
0 голосов
/ 12 июля 2011

попробуйте это:

 select `firstname`, `lastname`, `date_of_birth` 
    from `data`
   where `diagnosis_location`='Mayo' or  `diagnosis_location`='Lahey'
group by `firstname`, `lastname`, `date_of_birth` 
  having count(`diagnosis_location`) = 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...