2010-10-29 105 views
1

我有这样的SQL语句:愚蠢的SQL错误

SELECT game.game_id FROM game, userGame WHERE userGame.user_id = 1 
AND userGame.game_id != game.game_id; 

而且我得到这个:

1 
1 
2 
2 
3 
3 
4 
4 
4 
5 
5 
5 

我跑的声明在Android 2.1的SQLite3数据库。

的表是:

USERGAME 
-------- 
userId 
gameId 
more_columns 

GAME 
----- 
gameId 
more_columns 

我怎样才能解决这个问题?

UPDATE:
我想所有的游戏的id,他们不是在usergame表时,用户id = 1。

谢谢。

+3

=你的加入呢? – dotariel 2010-10-29 15:12:31

+3

这只是一个错误,如果它没有达到你所期望的。你想做什么? – 2010-10-29 15:12:40

+0

我已更新我的问题,并提供更多详细信息。 – VansFannel 2010-10-29 15:15:11

回答

1

不存在语法:你为什么要使用

select gameID 
from game g 
where not exists 
(select null from usergame ug 
where g.gameID = ug.gameID and ug.userID = 1) 
+0

它在Sqlite上效果很好。谢谢。 – VansFannel 2010-10-29 16:45:11

0

我不确定Sqlite的语法,但你可以尝试这样的事情。也许别人可以理顺语法?

SELECT * 
FROM game a left outer join usergame b on a.gameId = b.gameId and b.userId = 1 
WHERE b.gameId IS NULL 

OR

SELECT * 
FROM game a, usergame b 
WHERE (a.gameId *= b.gameId AND b.userId = 1) 
     AND b.gameId IS NULL 

基本上,你说: “给我在[游戏]表中的所有游戏,但排除USERID 1具有的。”

我不确定这是你想要达到的目标。

+0

是的,这就是我想要实现的。 – VansFannel 2010-10-29 15:22:59

+0

'* ='是pre-ANSI-92 SQL Server特定的OUTER JOIN语法,不是吗? – 2010-10-29 15:28:46

+0

@OMG小马 - 它可能是。但是,由于我不熟悉SQLite语法,因此我只提供了我已知的在T-SQL中工作的内容。我几乎不用* =我自己。 – dotariel 2010-10-29 15:52:36

0
SELECT game_id 
    FROM game a 
WHERE NOT EXISTS (Select 1 
        from game b, userGame c 
        where a.game_id=b.game_id and b.game_id=c.game_id and c.user_id=1)