Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在下面的查询中,我需要什么类型的mysql连接_Sql_Mysql - Fatal编程技术网

在下面的查询中,我需要什么类型的mysql连接

在下面的查询中,我需要什么类型的mysql连接,sql,mysql,Sql,Mysql,我有以下表格: platforms(id,platformname) games(id,title,platformid) gameslists(id,memberid,gameid) 我想从games表中选择所有记录,但排除特定成员的games列表中存在games.gameid的记录。简单地说:从games表中选择所有记录,除了GamesList表中存在gameid的记录,其中memberid等于999(memberid将来自会话)。我还需要平台名,但我认为这是一个简单的内部连接 我试过这个

我有以下表格:

platforms(id,platformname)
games(id,title,platformid)
gameslists(id,memberid,gameid)
我想从games表中选择所有记录,但排除特定成员的games列表中存在games.gameid的记录。简单地说:从games表中选择所有记录,除了GamesList表中存在gameid的记录,其中memberid等于999(memberid将来自会话)。我还需要平台名,但我认为这是一个简单的内部连接

我试过这个,还有其他的变化,但都没用

SELECT DISTINCT games.id, platforms.platformname, gameslists.gameid
FROM games
INNER JOIN platforms ON games.platformid = platforms.id
INNER JOIN gameslists ON games.id = gameslists.gameid
WHERE platformid = 1 and gameslists.memberid <> 999
ORDER BY games.releasedate DESC
LIMIT 8
选择DISTINCT games.id、platforms.platformname、gameslists.gameid
来自游戏
games.platformid=platforms.id上的内部连接平台
games.id=gameslists.gamesid上的内部加入gameslists
其中platformid=1和gameslists.memberid 999
按游戏订购。发布日期说明
限制8
使用左联接/为空 不使用 使用不存在 总结 在MySQL中,(连接条件中的值不能为null)

结论
由于使用外键,比较的列不太可能为NULL,因此使用LEFT JOIN/IS NULL。但是请注意,您不需要专门使用联接来排除数据。

请查看Stack Overflow自己的Jeff Atwood

感谢您的解释!这对未来的发展非常有帮助,我对此表示感谢。
   SELECT g.*
     FROM GAMES g
LEFT JOIN GAMESLISTS gl ON gl.gameid  = g.id
                       AND gl.memberid = ?
    WHERE gl.id IS NULL
SELECT g.*
  FROM GAMES g
 WHERE g.id NOT IN (SELECT gl.gameid 
                      FROM GAMESLISTS gl
                     WHERE gl.memberid = ?)
SELECT g.*
  FROM GAMES g
 WHERE NOT EXISTS(SELECT NULL
                    FROM GAMESLISTS gl
                   WHERE gl.gameid = g.id
                     AND gl.memberid = ?)