【问题标题】:Stupid sql error愚蠢的sql错误
【发布时间】:2010-10-29 15:09:30
【问题描述】:

我有这个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

我该如何解决这个错误?

更新:
当 userId=1 时,我想获取它们不在 usergame 表中的所有游戏 id。

谢谢。

【问题讨论】:

  • 你为什么在你的加入中使用 !=?
  • 如果它没有按照您的预期进行,这只是一个错误。你想做什么?
  • 我更新了我的问题,提供了更多细节。
  • 因此,对于给定用户 (userID = 1),您想要检索他们没有的所有游戏。对吗?
  • @XSaint32:是的,没错。对不起我的英语不好。用英语说出我的想法对我来说太难了。

标签: sql android sqlite


【解决方案1】:

不存在语法:

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

【讨论】:

    【解决方案2】:

    我不确定 Sqlite 语法,但您可以尝试类似的方法。也许其他人可以理顺语法?

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

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

    基本上,您是在说:“给我 [game] 表中的所有游戏,但排除 userID 1 拥有的游戏。”

    我不确定这是否是您想要实现的目标。

    【讨论】:

    • 是的,这就是我想要实现的目标。
    • *= 是 pre-ANSI-92 SQL Server 特定的 OUTER JOIN 语法,不是吗?
    • @OMG Ponies - 可能是这样。但是,由于我不熟悉 SQLite 语法,我只提供了我所知道的在 T-SQL 中工作的内容。我自己几乎不使用 *=。
    【解决方案3】:
    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 2018-06-05
      • 1970-01-01
      相关资源
      最近更新 更多