1

我之前问了一个关于从两个表中提取数据的问题,得到了一个完美的答案,我之前问了一个关于从两个表中提取数据的问题,得到了一个很好的答案,奥利琼斯完美地工作

这是我想通过添加 WHERE 从第一个表中获取某些数据的新情况,但现在它失败了,似乎它不应该

执行此功能时,此查询效果很好

table 1       table 2

product 1     product 4
product 2     product 2
product 3
product 4


SELECT ifnull( b.number >0, 0 ) purchased
FROM 1androidProducts a
LEFT JOIN (
   SELECT count( * ) number, product
   FROM 1androidSales 
   WHERE udid = '' 
   GROUP BY product
) b 
ON a.appTitle = b.product
ORDER BY a.appTitle
LIMIT 0 , 30

产生这个结果

result 

0
1
0
1

简而言之,表 1 中的每个项目都显示了这一点

如果 table-1-item 没有出现在表 2 中,则为 0 --OR-- 如果 table-1-item 确实出现在表 2 中,则为 1

现在当我添加这一行

SELECT ifnull( b.number >0, 0 ) purchased
FROM 1androidProducts a
WHERE a.accountID = 2        <<---------- I added this line 
LEFT JOIN (
   SELECT count( * ) number, product
   FROM 1androidSales 
   WHERE udid = ''
   AND accountID = 2          <<---------- I added this line
   GROUP BY product
) b 
ON a.appTitle = b.product
ORDER BY a.appTitle
LIMIT 0 , 30

现在它给出了一个错误

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 4 行的 'LEFT JOIN ( SELECT count( * ) number, product FROM 1androidSales ' 附近使用正确的语法

我只是想根据 accountID 获取表 1 的子集,以与第二个表进行比较。

所以如果我有这个

         table 1            table 2

accountid =1  product 1     accountid =2  product 4
accountid =1  product 2     accountid =2  product 2
accountid =1  product 3     accountid =2  product 5
accountid =1  product 4
accountid =2  product 1     
accountid =2  product 2
accountid =2  product 3
accountid =2  product 4
accountid =2  product 5

会产生这个结果

result 

0
1
0
1
1

所以结果记录总数与表一中满足 accountID 值 2 的记录数量相匹配

我认为这将是一个简单的改变,但它把我搞砸了

谢谢你的时间

4

1 回答 1

1

我相信你的第一个 where 子句在错误的位置,把它放在 join 之后:

SELECT ifnull( b.number >0, 0 ) purchased
FROM 1androidProducts a
LEFT JOIN (
   SELECT count( * ) number, product
   FROM 1androidSales 
   WHERE udid = ''
   AND accountID = 2 
   GROUP BY product
) b 
ON a.appTitle = b.product
WHERE a.accountID = 2 --Moved the first where clause
ORDER BY a.appTitle
LIMIT 0 , 30
于 2012-12-05T18:19:29.823 回答