如何选择多列中可以具有给定值的行

时间:2016-02-02 21:48:30

标签: mysql sql

我正在研究库存管理系统。我提供了5个字段供用户输入产品类别。现在我很困惑如何在五列中的任何一列中选择可以具有相同产品类别的行。

架构类似于

 id, name, size, cat1, cat2,cat3,cat4,cat5

我想要的例子是我想要选择所有具有产品类别“衣服”的项目,它应该进入所有五列并返回所有不同的行。我怎样才能做到这一点?

非常感谢你。

1 个答案:

答案 0 :(得分:2)

您的数据库应该采用不同的设计方式,您可以将与产品相关联的类别存储在单独的表中。

在当前模型中,您可以像这样进行查询:

SELECT id, name, size
FROM   product
WHERE  "Clothes" IN (cat1, cat2, cat3, cat4, cat5)

如果您还有其他类别需要检查,例如“鞋类”,那么这取决于您是在寻找既有两种类别又有两种类别的产品:

  1. “衣服”和“鞋类”类别(AND)的产品:

    WHERE  "Clothes" IN (cat1, cat2, cat3, cat4, cat5)
    AND    "Footwear" IN (cat1, cat2, cat3, cat4, cat5)
    
  2. 至少一个两个类别(OR)的产品:

    WHERE  "Clothes" IN (cat1, cat2, cat3, cat4, cat5)
    OR     "Footwear" IN (cat1, cat2, cat3, cat4, cat5)
    
  3. 创建视图

    您可以考虑创建一个视图,以便更轻松地制作此类更复杂的查询:

    CREATE VIEW product_cat (product_id, cat) AS
        SELECT id, cat1 FROM product UNION
        SELECT id, cat2 FROM product UNION
        SELECT id, cat3 FROM product UNION
        SELECT id, cat4 FROM product UNION
        SELECT id, cat5 FROM product;
    

    然后您可以执行以下查询:

    SELECT     product.id, product.name, product.size, product_cat.cat
    FROM       product
    INNER JOIN product_cat ON product.id = product_cat.product_id
    WHERE      product.cat LIKE 'C%';
    

    这会列出带有类别的产品,但只会列出以“C”开头的类别。