1

我对 SQL 很陌生,我正在努力练习以提高自己。

我有一个数据库,它有一个

表:球员、球队、比赛和胜利

玩家:pid、pname、年龄、国家

播放:pid, season, tid, value (pid -> pid in Players, tid -> tid in Teams )

团队:tid、tname、tcolor、tbudget

Wins : wtid, ltid, season, wcore, lscore ( wtid,ltid -> tid in Teams )


问题是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

该条件count(Teams.tname) > 1位于having子句而不是where子句中,因为它需要在执行group by之后对结果进行操作。

于 2013-03-24T21:25:59.110 回答
1

夫妇的事情。COUNT您的错误消息是因为您在函数中放置了一个数字常量。您应该只使用星号。

Players此外,您还没有为您的和Teams表指定连接条件。结果,您正在执行产品连接(可能不是您想要的)。我猜你需要加入你的Plays桌子。

您应该更改您的编码实践以使用“显式”连接语法以避免将来出现此类错误。

于 2013-03-24T21:27:34.273 回答