帮助嵌套选择用于选择不同的项目

时间:2011-07-31 15:35:59

标签: mysql stored-procedures

好的,这是我的问题......

我有一个表描述了一堆桶,这些桶都按颜色分组。

这些存储桶中的每一个都有一个相关的表,其中包含这些存储桶中所有项目的清单。

我需要制作一个将以桶颜色传递的存储过程,并期望得到一个在相同颜色组内的桶号,但不具有相同颜色的活动桶的任何匹配项

Bucket 

+-----------+------------+------+-----+---------+-------+
| Field     | Type       | Null | Key | Default | Extra |
+-----------+------------+------+-----+---------+-------+
| BucketNum | int(11)    | NO   | PRI | NULL    |       |
| Group     | varchar(6) | NO   | PRI | NULL    |       |
| Full      | tinyint(1) | YES  |     | NULL    |       |
| Active    | tinyint(1) | YES  |     | NULL    |       |
+-----------+------------+------+-----+---------+-------+


Bucket_Items
+------------------+------------+------+-----+---------+-------+
| Field            | Type       | Null | Key | Default | Extra |
+------------------+------------+------+-----+---------+-------+
| Bucket_BucketNum | int(11)    | NO   | PRI | NULL    |       |
| Bucket_Group     | varchar(6) | NO   | PRI | NULL    |       |
| ItemNum          | varchar(6) | NO   | PRI | NULL    |       |
| Qty              | int(11)    | YES  |     | NULL    |       |
+------------------+------------+------+-----+---------+-------+







Bucket
(SELECT *)
+-----------+-------+------+--------+
| BucketNum | Group | Full | Active |
+-----------+-------+------+--------+
|         7 | BLUE  |    0 |      1 |
|         8 | BLUE  |    0 |      0 |
|        12 | GREEN |    0 |      1 |
|        33 | GREEN |    0 |      0 |
|        56 | RED   |    0 |      0 |
|        99 | GREEN |    0 |      0 |
+-----------+-------+------+--------+


Bucket_Items
(SELECT *)
+------------------+--------------+---------+------+
| Bucket_BucketNum | Bucket_Group | ItemNum | Qty  |
+------------------+--------------+---------+------+
|                8 | BLUE         | AA11    |    1 |
|               12 | GREEN        | AA11    |   56 |
|               99 | GREEN        | AA11    |    7 |
|               12 | GREEN        | BB22    |    5 |
|                8 | BLUE         | CC33    |    3 |
|               12 | GREEN        | CC33    |    1 |
|               99 | GREEN        | DD44    |   88 |
|                7 | BLUE         | FF55    |   10 |
|               33 | GREEN        | FF55    |   56 |
|               33 | GREEN        | HH88    |   12 |
|               33 | GREEN        | JJ99    |   50 |
+------------------+--------------+---------+------+

所以,如果我要进入'GREEN'程序。

我希望它看到当前绿色的桶12活跃在它的组中,桶12保存项目AA11,BB22和& CC33我希望程序返回33.

33次通过,因为它是绿色的并且没有与桶12的共享项目。桶99失败,因为它与桶12共享项目AA11因此无法被挑选。

对不起,如果这有点令人困惑,我会非常愿意帮助解释它,我真的很挣扎,我希望社区可以帮助我。

先谢谢你们。

编辑:

对不起,这就是我到目前为止所做的,我只是对所有嵌套选择感到遗憾:

DELIMITER // 
CREATE PROCEDURE example (IN group_color INT)
BEGIN 

SELECT * FROM SELECT DISTINCT bucket, itemnum FROM bucket_items i, bucket b  
WHERE b.group = group_color AND b.bucketnum = i.bucket_bucketnum) AS x 
WHERE itemnum != (SELECT item FROM bucket WHERE active = true AND Group=group_color) AS y;

END //
DELIMITER ;

并不意味着因为“让互联网为我工作”类型

2 个答案:

答案 0 :(得分:0)

我不会为你编写代码,但是这里的想法是:选择存储桶,其中存储桶中项目的交集和给定存储桶中的项目color 为空

关键词:选择,在哪里,不存在,相交......

答案 1 :(得分:0)

我不使用MySQL我使用MSSQL。我一直觉得创建视图有助于按照我想要的方式过滤项目并完成所有繁重的工作。然后我使用这些视图编写查询。