在下面的查询中,我需要什么类型的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 = ?)