1

2つのテーブルからデータを抽出することについて以前に質問し、完全に機能する美しい回答を得ました。2つのテーブルからデータを抽出することについて以前に質問し、完全に機能する美しい回答を得ました

これは、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 構文にエラーがあります。4 行目の 'LEFT JOIN ( SELECT count( * ) number, product FROM 1androidSales ' の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

accountID に基づいてテーブル 1 のサブセットを取得し、2 番目のテーブルと比較したいだけです。

だからもし私がこれを持っていたら

         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

したがって、結果レコードの総数は、テーブル 1 の accountID 値 2 を満たすレコードの数と一致します。

これは簡単に変更できると思っていましたが、かなり面倒です

御時間ありがとうございます

4

1 に答える 1

1

最初の where 句が間違った場所にあると思います。結合の後に置きます。

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 に答える