有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
导致语法错误。
唉,我无法弄清楚这里出了什么问题
答案 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