SQLite-запрос для получения записей с определенным условием - PullRequest
0 голосов
/ 27 августа 2018

Имя моей таблицы SQLite - Счета-фактуры, имеющие столбцы Номер детали и Производитель.

Моя проблема состоит в том, чтобы запросить таблицу таким образом, чтобы она показывала только записи, в которых номер детали имеет по крайней мере 2 разных уникальных производителя.

Я исследовал стек над потоком и попробовал это решение

QString Filter = "PART_NUMBER in (select PART_NUMBER FROM Invoices GROUP BY "
         "PART_NUMBER HAVING count(PART_NUMBER)>1)";
model->setFilter(Filter);
model->select();

Но проблема этого решения в том, что он показывает номер детали того же производителя.

Редактировать:

enter image description here

В этом примере он должен возвращать только часть 2

1 Ответ

0 голосов
/ 27 августа 2018

Вам нужно сосчитать Manufacturer:

select PART_NUMBER FROM Invoices GROUP BY "
     "PART_NUMBER HAVING count(MANUFACTURER)>1

Хорошо, вы говорите, что ваши данные выглядят так:

PART_NUMBER | MANUFACTURER
      1     |      A
      2     |      A
      2     |      A (duplicate entry)
      3     |      A
      3     |      B
      4     |      A
      4     |      B

Тогда вы бынужно выбрать HAVING COUNT(DISTINCT(MANUFACTURER)).

В sqlite это выглядит немного сложнее:

SELECT COUNT(MANUFACTURER) FROM (SELECT DISTINCT MANUFACTURER FROM Table WHERE ...); 

См. это сообщение в блоге .

Но это больше, чем QSqlQueryModel может сделать с setFilter(...).

Эта проблема выглядит как проблема проектирования базы данных.Знаете ли вы о нормализации базы данных ?

Когда вы нормализуете свои таблицы, проблема значительно упрощается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...