0
我有这个查询,它做它应该做的。 它发现表1中的所有记录与表2中的匹配,并且指定一个伪列值1. 然后它联合一个查询,检索表1中表2中没有匹配的所有记录,并指定一个伪列值为0. 这有效,但我相信可以以更有效的方式进行。需要建议formore漂亮sql查询
SELECT aplac.*, 1 AS selected
FROM aux_placements aplac
JOIN product_placements pplac
ON pplac.placement_id = aplac.placement_id
WHERE pplac.product_id = 1
UNION
SELECT distinct aplac.*, 0 AS selected
FROM aux_placements aplac
WHERE placement_id NOT IN
(SELECT aplac.placement_id
FROM aux_placements aplac
JOIN product_placements pplac
ON pplac.placement_id = aplac.placement_id
WHERE pplac.product_id = 1)
我在想这样的事情可能工作:
SELECT aplac.*,
CASE WHEN aplac.placement_id IS NULL
THEN 0
ELSE 1
END AS selected
FROM aux_placements aplac
LEFT OUTER JOIN product_placements pplac
ON pplac.placement_id = aplac.placement_id
WHERE pplac.product_id = 1;
任何建议表示赞赏。 在此先感谢
编辑:sqlfiddle是avaliable这里:http://sqlfiddle.com/#!2/57013a/1
在你的第二个查询,更改WHERE到AND – Strawberry