2010-10-29 106 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)