根据左边连接其他表选择空记录

时间:2015-07-07 22:17:32

标签: mysql sql

我在下面有一个选择声明。 tblplayer包含709条Game =' FPS'的记录。 tblPlayerPoints包含1个带有值的记录(2,' FPS',812,0)。 sql应返回709条记录,我可以通过这些记录插入值(1,' FPS',playerid,0)。 但是在运行下面的SELECT时,它只返回708条记录。所以它排除了已经存在的记录。

它应忽略该记录,因为第一个值(2)与新的第一个值(1)不同。我尝试添加AND tblPlayerPoints.Gamenumber< 2然后我得到0记录而不是709。

删除tblPlayerPoints.Points IS NULL后,我确实获得了709条记录。但是我无法删除该行,因为如果一行中包含值(1,' FPS',playerid,0)已经存在,则不应再次添加该行。

SELECT 1 , 'FPS', tblPlayer.PlayerId, 0
FROM tblPlayer
LEFT JOIN tblPlayerPoints ON tblPlayer.Id = tblPlayerPoints.PlayerId
WHERE tblPlayer.Game = 'FPS'
AND tblPlayer.Subscription = '1'
AND tblPlayerPoints.Points IS NULL 

完整插入示例:

INSERT INTO tblpronoploegritpunten ("1","FPS",PlayerId,"0") 
SELECT 1 , 'FPS', tblPlayer.PlayerId, 0
FROM tblPlayer
LEFT JOIN tblPlayerPoints ON tblPlayer.Id = tblPlayerPoints.PlayerId
WHERE tblPlayer.Game = 'FPS'
AND tblPlayer.Subscription = '1'
AND tblPlayerPoints.Points IS NULL 

此完整插入应向tblPlayerPoints添加709条记录 如果我将完整插入示例(订阅除外)中的" 1&#34更改为" 2" s它应该只添加708条记录,因为已经有一条记录开始价值2。

1 个答案:

答案 0 :(得分:1)

根据我对您的问题的理解,而不是

and tblPlayerPoints.Gamenumber is null

你可能想和

一起去
and IFNULL(tblPlayerPoints.Gamenumber,0) <> 1