我有一个类别表:SQL存储过程和位运算符
id;description;special
----------------------
1;Spares;TRUE
2;Accessories;TRUE
4;Consumables;TRUE
8;Services;TRUE
11;Printer;FALSE
12;Monitor;FALSE
13;Other;FALSE
特殊字段指定特殊类别具有固定ID和不能被删除,也不修改。我已经为这些分配了按位或可用的ID。
然后我有项目,每个项目属于一个类别(1:n的关系)。
现在,我想写入的存储过程需要含有id的OR-ED组合的输入参数:
1 I want spare parts
2 I want accessories
4 I want consumables
**5 I want consumables AND spare parts**
等
如果该参数为NULL,则希望每个项目,无论其类别。
这是很容易的,说的参数被称为_or_category
,那么WHERE
条款可能是这样的:
SELECT
*
FROM
items I
JOIN
categories C ON (C.id = I.category)
WHERE
(_or_category IS NULL) OR (C.special = TRUE AND C.id | _or_categoria = _or_categoria)
;
第一个问题: * 编辑:对不起,这不是一个问题,因为我在WHERE子句中有C.special = TRUE。 * 类别12可以“看到”为id = 8或4,因此如果我只想选择易损件,我也可以看到显示器!
第二个问题: 我不知道如何指定何时需要所有不是服务的项目(cat:8)。
如果要逐位这些,为什么你用11,12和13作为ID?这不应该是2的权力吗? – LJM 2011-06-06 14:59:41
我只想按位分类的特殊类别,而不是所有其他。 – vulkanino 2011-06-06 15:01:04
如果你使用按位,他们需要互斥......所以你不能有重叠的可能性。现在,打印机看起来像一个耗材服务。您需要2个字节才能正确表示。 0x01 - 备用到0x40其他 – FlyingStreudel 2011-06-06 15:53:58