SQLite查询以获取具有特定条件的记录

时间:2018-08-27 07:37:04

标签: qt sqlite qt5

我的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 :(得分:2)

您需要计算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 ...); 

请参见this blog post

但这远远超过QSqlQueryModel使用setFilter(...)所能做的。

此问题看起来像数据库设计问题。您知道database normalization吗?

对表进行规范化后,问题将大大简化。