1

私はSQLにまったく慣れておらず、自分自身を向上させるために練習しようとしています。

私はデータベースを持っています

表:プレーヤー、チーム、プレー、および勝利

プレイヤー:pid、pname、年齢、国

再生:pid、season、tid、value(pid-> pid in Players、tid-> tid in Teams)

チーム:tid、tname、tcolor、tbudget

勝利:wtid、ltid、season、wscore、lscore(wtid、ltid-> Teamsのtid)


質問はFind the name of the players whose played in atleast 2 dif. teams with same color

私がしたことは

SELECT DISTINCT P.pname 
FROM Players P
    ,Teams T1 
GROUP BY T1.tcolor
HAVING 1 < (
   SELECT COUNT (10)
   FROM Teams T2
   WHERE T1.tcolor=T2.tcolor)

これを照会しようとすると、次のエラーが発生します。

Error Code: 1630
FUNCTION PRALATEST.COUNT does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual

私はどの部分で間違っていますか?

4

2 に答える 2

3

これを試して:

select pname
from Players
join Plays on Plays.pid = Players.pid
join Teams on Teams.tid = Plays.tid
group by pname, tcolor
having count(Teams.tname) > 1

group byが実行された後、結果を操作する必要があるため、条件count(Teams.tname) > 1はwhere句ではなくhave句にあります。

于 2013-03-24T21:25:59.110 に答える
1

カップルのもの。エラーメッセージは、COUNT関数に数値定数を入れたためです。アスタリスクを使用する必要があります。

Playersまた、Teamsテーブルの結合条件を指定していません。その結果、あなたは製品への参加を行っています(おそらくあなたが望むものではありません)。テーブルに参加する必要があると思いPlaysます。

将来このようなエラーを回避するために、「明示的な」結合構文を使用するようにコーディング方法を変更する必要があります。

于 2013-03-24T21:27:34.273 に答える