MySQL Retrieve Records, где критерии уникальны и истинны, т.е. никаких других записей не существует - PullRequest
0 голосов
/ 06 июля 2011

У меня есть устаревшая база данных, в которой я работаю с базовой разметкой столбцов, например:

SampleID
CompanyID
CompanyApplication
CompanyTest1
...
CompanyTest25

Нормализовано, это вызывает проблемы с анализом данных.

Мне нужно получить идентификаторы компании (сгруппированные по), где поле CompanyApplication = "Регистрация", но у этой компании нет ни одного из полей CompanyTest (n), выбранных для любого SampleID.

Проблема в том, что существуют идентификаторы компанийв которых есть записи CompanyApplication и CompanyTest (n) (несколько строк), но я хочу получить идентификаторы CompanyID, в которых есть только приложение CompanyApplication of Registration.

Данные, которые помогут проиллюстрировать:

SampleID | CompanyID | CompanyApplication | CompanyTest1 | ... | CompanyTest25
------------------------------------------------------------------------
1         | 1        | Registration       |              |     |
------------------------------------------------------------------------
2         | 1        |                    | True         |     |
------------------------------------------------------------------------
3         | 2        | Registration       |              |     |
------------------------------------------------------------------------
4         | 2        | Registration       |              |     |
------------------------------------------------------------------------
5         | 3        |                    | True         |     |
------------------------------------------------------------------------
6         | 3        |                    |              |     | True

Iтолько хотят получить строки 3 и 4, потому что они ТОЛЬКО имеют Регистрацию и никакое другое тестирование.

1 Ответ

1 голос
/ 06 июля 2011

Мы могли бы начать с выбора всех строк, которые вы пытаетесь исключить, а затем с помощью NOT EXISTS пропустить CompanyID с, которые находятся в этом запросе.

SELECT DISTINCT ct1.company_id
FROM company_table AS ct1
WHERE ct1.CompanyApplication = "Registration"
  AND NOT EXISTS(
        SELECT 1
        FROM company_table AS ct2
        WHERE ct1.company_id = ct2.compnay_id
          AND (ct2.CompanyTest1 IS NOT NULL
               OR ct2.CompanyTest2 IS NOT NULL
               ...
               OR ct2.CompanyTest25 IS NOT NULL)
        )
...