我有两个我正在使用的表的例子 我正在使用输出来构建数组,因此我的输出需要是单列
第一张表是产品清单
PRODUCT ID PRODUCT_NAME
01 product1
02 product2
03 product3
04 product4
05 product5
06 product6
07 product7
08 product8
09 product9
10 product10
11 product11
12 product12
表二是购买清单
SALESID PRODUCT_NAME USERID DATE
01 product1 001ABC 11-10-2012
02 product5 001ABC 11-11-2012
03 product1 002XYZ 11-11-2012
04 product12 001ABC 11-13-2012
05 product7 001ABC 11-13-2012
06 product3 002XYZ 11-14-2012
07 product11 002XYZ 11-14-2012
现在我需要的是如果我提供类似001ABC的USERID 如果USERID与我提供的产品相匹配并且(它应该自动)它出现在产品表中,我需要输出为1,如果它只出现在产品表中,我需要它显示0
上面两个表和这两个USERID的两个例子看起来像这样
提供了USERID 001ABC 产量
OUTPUT
1
0
0
0
1
0
1
0
0
0
0
1
USERID 002XYZ提供 产量
OUTPUT
1
0
1
0
0
0
0
0
0
0
1
0
使用CASE语句失败或我没有得到正确的语法 我正在使用PHP和MYSQL
我的当前查询只要我有一个USERID就可以正常工作但是当我尝试使用userID进行过滤时失败
PHP / MYSQL查询:
SELECT (PURCHASES.PRODUCT_NAME IS NOT NULL) AS purchased
FROM PRODUCTS
LEFT JOIN PURCHASES
ON PRODUCT_NAME = PRODUCT_NAME ORDER BY 1
我不确定我做错了什么。
当我添加另外两个购买的用户时,结果似乎只是在输出中添加了两行,因此输出将有14行而不是原始的12,如我所示的示例中所示。
我怎样才能获得单列输出,其总记录数等于每行设置为零的产品总数,除非在产品名称标识的购买表中找到匹配,而不是零1在输出中。
答案 0 :(得分:4)
这是您想要的查询。您需要按产品ID订购结果;您是按输出列中的0/1值对它们进行排序,这当然会破坏该列的有用性。
您还需要对过滤后的购买表进行摘要,以确定是否购买了特定产品。这是子查询“b”。
最后,您从产品到购买都离开了,因为您希望每个产品的输出结果集中只有一行。
select ifnull(b.number>0,0) output
from products a
left join (
select count(*) number,
product_name
from purchases
where userid = '001ABC'
group by product_name
) b on a.product_name = b.product_name
order by a.product_id
例如,请参阅此SQL Fiddle。 http://sqlfiddle.com/#!2/6e985/12/0