SELECT(IF(IN查询

时间:2010-03-18 10:37:45

标签: mysql

有3张桌子。产品,选项和Prod_Opts_relations。后者持有product_id和option_id,因此我应该能够确定为任何给定产品选择哪些选项。

现在我想从选项表中检索所有选项,其中额外别名字段的值应该保持选中或取消选中,具体取决于关系表中关于产品ID的mathing记录的存在。

到目前为止,我想出了这个:

SELECT 
 IF(IN(SELECT id_option FROM prod_opt_relations WHERE id_product='18'),'y','n') AS booh  
 ,optionstable.id AS parent_id  
 ,optionstable.name_en AS parent_english  
 ,optionstable.name_es AS parent_spanish  
FROM product_options AS optionstable  
WHERE 1  

导致语法错误。

唉,我无法弄清楚这里出了什么问题

2 个答案:

答案 0 :(得分:1)

在两个表之间使用left join,以便在匹配时检索选项表中的所有数据。然后测试从右表返回的值是否为null以设置y / n标志。

SELECT                                                                        
  IF(por.id_product IS NULL, 'n', 'y') AS booh                                      
  ,optionstable.id AS parent_id                                                
  ,optionstable.name_en AS parent_english                                      
  ,optionstable.name_es AS parent_spanish                                      
FROM
   product_options AS optionstable                                          
   LEFT JOIN prod_opt_relations as por ON (
     por.id_product=18 AND por.id_option=optionstable.id_option
   )
WHERE 1                                                                       

答案 1 :(得分:0)

您未指定应将哪个表达式与IN列表进行比较:

IF( foo IN (...), 'y', 'n')

编辑:您的语句缺少与此示例中的foo相同的内容。

请参阅http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_in