相关产品查询?

时间:2015-09-30 10:29:22

标签: mysql

我试图从我的数据库中获取相关产品。在下面的示例中,我尝试获取ID为1的产品的相关产品。查询应选择有关产品1的信息(其类型,颜色,大小和样式),然后选择其他产品(不包括其自身)具有相同类型,颜色大小或样式。

SELECT * 
FROM prds t1, prds t2 
WHERE t1.id = 1 
AND t2.id != 1 
AND (t1.type_id = t2.type_id 
OR t1.colour_id = t2.colour_id
OR t1.size_id = t2.size_id
OR t1.style_id = t2.style_id)
AND t2.published = 1

上述查询只返回产品1次数。我哪里错了?

1 个答案:

答案 0 :(得分:1)

我更喜欢将其写为cross join(因为我在from子句中憎恶逗号)。但问题是select *。代替:

SELECT t2.* 
FROM prds t1 CROSS JOIN
     prds t2 
WHERE t1.id = 1 AND t2.id <> 1 AND
      (t1.type_id = t2.type_id OR
       t1.colour_id = t2.colour_id OR
       t1.size_id = t2.size_id OR
       t1.style_id = t2.style_id
      ) AND
      t2.published = 1;

真正的区别在于FROM子句。您的版本正在从两个表中选择所有列。它们不仅具有相同的列名,而且还具有产品1记录中的第一列。