一个表中有三个标识符的SQL算法

一个表中有三个标识符的SQL算法,sql,database,algorithm,codeigniter,Sql,Database,Algorithm,Codeigniter,这可能真的很容易,但我不知道如何通过一个查询从我的数据库中获取必要的值。只是现在想不出来。我将在CodeIgniter系统中进行此查询 表“信息”结构: CREATE TABLE information ( planid int(11) NOT NULL, production_nr int(11) NOT NULL, status int(11) NOT NULL ); 表“信息”内容: 必要输出: 我希望得到最好的结果-仅使用一个查询,但如果不可能,则使用多个all

这可能真的很容易,但我不知道如何通过一个查询从我的数据库中获取必要的值。只是现在想不出来。我将在CodeIgniter系统中进行此查询

表“信息”结构:

CREATE TABLE information (
    planid int(11) NOT NULL,
    production_nr int(11) NOT NULL,
    status int(11) NOT NULL
);
表“信息”内容: 必要输出: 我希望得到最好的结果-仅使用一个查询,但如果不可能,则使用多个all planid,其中:此计划id的所有生产状态>=3

在这种情况下,我需要得到这些plandid:2和5,因为这些plandid的所有产品的状态都大于或等于3。

试试这个

SELECT planid , production_nr FROM  information
WHERE production_nr IN(SELECT production_nr FROM information) AND STATUS >=3

您的问题称为关系划分。基本上有两种方法

1不存在状态为<3的生产编号的planid

select planid 
from information i1
where not exists (
    select 1 from information i2
    where i1.planid = i2.planid
      and i2.planid < 3
) 
2 planid,其中生产数量等于状态>=3的生产数量。我把它作为练习;-

select planid, production_nr
from information inf1
where not exists (select 1 from information inf2
                  where inf1.planid = inf2.planid
                  and   status < 3)

您可以考虑根据您的需要修改SELECT子句第一行:

如果表PK包含status列,则添加distinct

更改列列表


查询的执行计划可能是:1。主查询执行顺序完整表扫描。2.对于每一行,子查询将检查给定的planid是否有不符合需求状态>=3的行。在第一行中,找到子查询停止。