回到我以前的mysql技能,我需要以下查询。
我有两张桌子
一个是包含名为products的所有项的表,其中cols item name,item num
二是一张购买物品的表格,上面有cols item num,date
我需要的结果是这样的
ITEM-----PURCHASED
item1-------0
item2-------0
item3-------0
item4-------1 This item purchased
item5-------0
item6-------1 This item purchased
item7-------0
item8-------0
.
.
.
itemX-------0
如果项目存在于购买项目表中,则输出包含所有项目和购买的COL中的1。
如果尚未购买,则返回0。
很抱歉,如果这很简单的话,我的大脑现在处于崩溃状态,我已经很长时间需要这样的东西了
最佳答案
使用aLEFT JOIN
和aCASE
测试联接表中的NULL
,您可以相应地返回0或1(我使用了CASE
,但您也可以在MySQL中执行IFNULL()
):
SELECT
products.name,
products.item_num
/* items that have no related rows in `purchased` will be NULL */
CASE WHEN purchased.item_num IS NULL then 0 ELSE 1 END AS purchased
/* Could also just do:
(purchesd.item_num IS NULL) AS purchased
because MySQL will return a 0 or 1 from the boolean condition,
but the CASE is more portable */
FROM
products
LEFT JOIN purchased ON products.item_num = purchased.item_num