2013-11-22 181 views
0
CREATE TABLE hardware 
(
name  varchar(10), 
ID  serial    PRIMARY KEY NOT NULL 
); 

CREATE TABLE games 
(
name  varchar(100), 
ID  serial     PRIMARY KEY 
); 

CREATE TABLE gameVersion 
(
gameID  integer   REFERENCES games(ID), 
version  integer, 
ID  char(10)  PRIMARY KEY  NOT NULL 
); 

CREATE TABLE versionHardware 
(
hardwareID  integer   REFERENCES hardware(ID), 
versionID  char(10)  REFERENCES gameVersion(ID), 
ID  serial   PRIMARY KEY 
); 

CREATE TABLE cheatCodes 
(
ID  serial   PRIMARY KEY  NOT NULL, 
code  varchar(60), 
gameID  integer   REFERENCES games(ID) 
); 

我如何找到任何可以使用ID为(5)的硬件进行游戏的记录上的cheatCodes数量。使用COUNT的SELECT语句

我试图

SELECT COUNT(*) 
    FROM cheatCodes, games, gameVersion,hardware, versionHardware 
    WHERE cheatCodes.GameId = games.ID 
    AND gameVersion.gameID = games.ID 
    AND versionHardware.versionID = gameVersion.ID 
    AND hardware.ID = 5; 

但它不给我正确的答案。

+0

你被丢失的组? –

+0

我不认为小组会帮助我,因为我正在寻找游戏的数量。我对吗? – user2821471

+0

您缺少硬件连接条件。 – tvm

回答

0

尝试:

SELECT COUNT(DISTINCT cheatCodes.GameId) as CheatCodeCount 
FROM cheatCodes, games, gameVersion,hardware, versionHardware 
WHERE cheatCodes.GameId = games.ID 
AND gameVersion.gameID = games.ID 
AND versionHardware.versionID = gameVersion.ID 
AND versionHardware.hardwareID = hardware.id 
AND hardware.ID = 5; 
+0

男人,你救了我的命,我在这份声明中全天都是股票,上帝保佑你们所有人 – user2821471

+0

Glad帮助@ user2821471。快乐编码和上帝保佑。 – Edper

0

请尝试下面的查询。硬件表的链接丢失, 链接。

SELECT COUNT(*) 
    FROM cheatCodes, games, gameVersion,hardware, versionHardware 
    WHERE cheatCodes.GameId = games.ID 
    AND gameVersion.gameID = games.ID 
    AND versionHardware.versionID = gameVersion.ID 
    AND hardware.id = versionHardware.hardwareID  
    AND hardware.ID = 5; 
+0

正确的结果是2,但是我的SELECT给了我38,其中37个是重复值,我用DISTINCT但它没有帮助你的SELECT给了我莫名其妙的结果7 – user2821471

+0

我在你的查询中只添加了hardware.id = versionHardware.hardwareID mayb你可以在不同的表格中发布数据 – Shann