具有来自一个表的三个标识符的SQL算法

时间:2014-05-29 09:08:35

标签: sql database algorithm codeigniter

这可能很容易,但我无法弄清楚,如何通过一个查询从我的数据库中获取必要的值。现在就想不出来。我将在CodeIginiter系统中进行此查询。

表'信息'构造:

CREATE TABLE information (
    planid int(11) NOT NULL,
    production_nr int(11) NOT NULL,
    status int(11) NOT NULL
);

表'信息'内容:
enter image description here

必要的产量: 我想得到(最好 - 只有一个查询,但如果不可能,那么有多个)所有planid的位置:所有这个计划id的pruduction_nrs状态> = 3.

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

3 个答案:

答案 0 :(得分:1)

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

您可以考虑根据需要修改select子句(第一行):

  • 添加distinct(如果表PK包含状态列)

  • 更改列列表

答案 1 :(得分:0)

试试这个,

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

答案 2 :(得分:0)

你的问题被称为关系分裂。基本上有两种方法可以实现它

1)planid,其中不存在状态为&lt;的production_nr; 3

select planid 
from information i1
where not exists (
    select 1 from information i2
    where i1.planid = i2.planid
      and i2.planid < 3
) 

2)planid,其中production_nr的数量等于output_nr的数量,状态为&gt; = 3.我将把它留作练习;-)