代码之家  ›  专栏  ›  技术社区  ›  Gurushant GeneCode

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

  •  0
  • Gurushant GeneCode  · 技术社区  · 6 年前

    我的SQLite表名是Invoices,有Part Number和Manufacturer列。

    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 回复  |  直到 6 年前
        1
  •  2
  •   Martin Hennings    6 年前

    你需要数数 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 .

    setFilter(...)

    这个问题看起来像是数据库设计问题。你知道吗 database normalization ?

    当您规范化了表之后,问题就大大简化了。