0

次のように、MySQL select ステートメントでサブセレクトを作成しようとしました。

SELECT
  c.id AS id,
  c.name AS name,
  (SELECT count(*) FROM orders o WHERE o.user_id = c.id) AS order_count
FROM
  customers c

これが MySQL で機能しない理由はありますか? MySQLでそのようなことをすることは可能ですか? バージョン 3.23.58 と 5.1.60 で試しました。

前もって感謝します!

4

4 に答える 4

2

,の後に見逃しましたname。これを試してください:

SELECT
  c.id AS id,
  c.name AS name,
  (SELECT count(*) FROM orders o WHERE o.user_id = c.id) AS order_count
FROM
  customers c
于 2013-01-07T12:10:39.920 に答える
2

この種のエラー (カンマの欠落など) を回避するために、クエリを次のように書き出すのが好きです...

    SELECT c.id 
         , c.name 
         , COALESCE(COUNT(o.user_id),0) order_count
      FROM customers c
      LEFT
      JOIN orders o
        ON o.user_id = c.id
     GROUP
        BY c.id;
于 2013-01-07T12:16:22.790 に答える
1
SELECT
  c.id AS id ,
  c.name AS name ,
 (SELECT count(*) 
   FROM orders o 
   WHERE o.user_id = c.id) AS order_count
FROM
 customers c

すべての列の後に「,」を使用します

于 2013-01-07T12:14:02.883 に答える
0

を使用した別の方法joins

サンプルデータ:

ID  NAME
1   john
2   jack
3   kelly

ID  USERID
10  1
11  2
12  1
13  3
14  2
15  3
16  2
17  4
18  1

クエリ:

SELECT count(o.userid), c.id, c.name
FROM cusomter c
LEFT JOIN orders o
ON c.id = o.userid
GROUP BY c.id
;

case when顧客に注文がない場合は、null を 0 として表すために追加できます。あなたの選択。

結果:

COUNT(O.USERID)     ID  NAME
3                   1   john
3                   2   jack
2                   3   kelly
于 2013-01-07T12:15:33.800 に答える