0

我有一个名为 PRODUCTS 的表,其中包含三个不同类别的 3 列,我想选择在 3 列中的任何一个中具有 3 个值中的任何一个的所有产品。我想要做的是根据 3 个类别中的任何一个显示相关产品。

示例表:

ID,名称,cat1,cat2,cat3

1,键盘,2,8,4
2,鼠标,2,NULL,NULL
3,显示器,16,2,NULL

假设我正在查看 ITEM id=1,我想做一个查询以显示在 3 列中的任何一个中具有类别编号 2 的其他 2 个产品。

我怎么做?

非常感谢,安德烈斯

4

2 回答 2

2
SELECT * FROM table_name WHERE id != 1 AND (cat1 = 2 OR cat2 = 2 OR cat3 = 2)
于 2012-06-06T19:42:57.680 回答
1

那么,对于任何给定的 ID,在他们的类别中找到与所选 ID 具有相同类别的其他“兄弟姐妹”?


从产品 p1、产品 p2、产品 p3中选择 id 作为 selected_id,p1.cat 作为 p1_cat,p2.cat 作为 p2_cat,p3.cat 作为 p3_cat
其中
p1.cat = p2.cat

p1.cat = p3.cat
// 和其他各种限定条件,例如,它不是重复
p1.id != p2.id
p1.id != p3.id
p2.id != p3.id

// 你也可以这样做join products p3 on p3.cat = p1.cat而不是 // 我做的冗长方式它

顺便说一句,这在性能方面是个坏主意。最好以编程方式完成,而不是在 SQL 中。任何时候你处理像这样的游标查询,只需在代码中使用数组,而不是在 SQL 中

于 2012-06-06T19:44:44.883 回答