2010-03-18 69 views
1

有3个表,产品,选项和Prod_Opts_relations,后者持有的product_id和option_id,所以我应该能够找出被选择用于任何给定的产品的选项。SELECT(IF(询问

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

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

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 

导致语法错误。

唉,我只是想不通哪里出问题这里

+0

你会得到哪个错误信息? – titanoboa 2010-03-18 11:03:07

回答

1

用你的两个表之间的left join从选项表中检索所有的数据每当有匹配与否。然后测试从右表返回的值是否为空以设置您的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                  
+0

似乎还不错。感谢您的答复 – Harold 2010-03-18 12:43:39