0

GROUPBY関数を使用してデータを並べ替えようとしています。これを追加するまで、クエリは正常に機能します。ここにあります:

SELECT a.cust_id, a.account_id, a.product_cd, status, b.name, i.fname, i.lname, 
from account a, branch b, individual i
where b.name = 'So. NH Branch' or b.name = 'Woburn Branch' and a.status = 'ACTIVE'
group by b.name;

次のメッセージが表示されます。SQL構文にエラーがあります。アカウントa、ブランチb、個々のiから'の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。ここでb.name='です。2行目のNHBranch'またはb.name'

4

3 に答える 3

3

SELECT:に余分なコンマがあります

SELECT a.cust_id, 
  a.account_id, 
  a.product_cd, 
  status, 
  b.name, 
  i.fname, 
  i.lname, 
         ^ --- this is incorrect.

クエリで奇妙なことの1つは、テーブルを結合しておらず、デカルト結果セットを返していることです。

デカルト結果セットが必要ない場合はJOIN、テーブル間を使用します。これに似ています:

SELECT a.cust_id, 
   a.account_id, 
   a.product_cd, 
   status, 
   b.name, 
   i.fname, 
   i.lname
from account a
INNER JOIN branch b
  ON a.branchid = b.id
INNER JOIN individual i
  ON a.individualid = i.id
where b.name = 'So. NH Branch' or b.name = 'Woburn Branch' and a.status = 'ACTIVE'
group by b.name;

注:テーブルを結合する列名を推測しました。

于 2013-02-01T18:49:19.073 に答える
1

さらに、bluefeetによって指摘された誤ったコンマは、デカルト積を生成しています。これはあなたが望むものではないかもしれません。なんらかの方法でテーブルを関連付ける必要があります(図のみ)。

SELECT a.cust_id, 
       a.account_id, 
       a.product_cd, 
       status, 
       b.name, 
       i.fname, 
       i.lname 
FROM   account a, 
       branch b, 
       individual i 
WHERE  i.cust_id = a.cust_id             <-- JOIN individual to account
       AND b.account_id = a.account_id   <-- JOIN branch to individual
       AND b.name = 'So. NH Branch' 
        OR b.name = 'Woburn Branch' 
           AND a.status = 'ACTIVE' 
GROUP  BY b.name; 
于 2013-02-01T18:51:48.367 に答える
0

デカルト積と誤ったコンマに関する他の回答に加えて、データを並べ替えるだけの場合は、集計関数を使用する場合にのみ必要であるのではなく、使用する必要がありますORDER BYGROUP BY

于 2013-02-01T20:18:12.667 に答える