Mysql 如何排除同时满足两个条件的记录?
我有一个相当复杂的问题Mysql 如何排除同时满足两个条件的记录?,mysql,Mysql,我有一个相当复杂的问题 SELECT g.guidUser,u1.username,g.sent,g.accepted,g.declined,g.rewarded,g.guidUserVersus,u2.username AS usernameUserVersus FROM games g INNER JOIN userdata u1 ON g.guidUser=u1.guidUser INNER JOIN userdata u2 ON g.guidUserVersus=u2.guidUse
SELECT g.guidUser,u1.username,g.sent,g.accepted,g.declined,g.rewarded,g.guidUserVersus,u2.username AS usernameUserVersus
FROM games g
INNER JOIN userdata u1 ON g.guidUser=u1.guidUser
INNER JOIN userdata u2 ON g.guidUserVersus=u2.guidUser
WHERE
((g.sent!="" OR g.accepted!="" OR g.declined!="")
AND g.rewarded="" AND (g.guidUser='1' OR g.guidUserVersus='1'))
ORDER BY g.guidUser, g.idGame
现在我想排除同时具有
(g.accepted!=“和g.guidUserVersus='1')
我试过了
SELECT g.guidUser,u1.username,g.sent,g.accepted,g.declined,g.rewarded,g.guidUserVersus,u2.username AS usernameUserVersus,g.idGameVersus,g.timeFinal
FROM games g
INNER JOIN userdata u1 ON g.guidUser=u1.guidUser
INNER JOIN userdata u2 ON g.guidUserVersus=u2.guidUser
WHERE
((g.sent!="" OR g.accepted!="" OR g.declined!="")
AND g.rewarded="" AND (g.guidUser='1' OR g.guidUserVersus='1'))
** AND !(g.accepted!="" AND g.guidUserVersus='1') **
ORDER BY g.guidUser, g.idGame
但它似乎并没有选择它应该选择的记录,就像让g接受一样=“”和g.guidUserVersus='2'
这是小提琴
编辑:您需要使用或在条件内替换和
SELECT g.guidUser,u1.username,g.sent,g.accepted,g.declined,g.rewarded,g.guidUserVersus,u2.username AS usernameUserVersus,g.idGameVersus,g.timeFinal
FROM games g
INNER JOIN userdata u1 ON g.guidUser=u1.guidUser
INNER JOIN userdata u2 ON g.guidUserVersus=u2.guidUser
WHERE
((g.sent!="" OR g.accepted!="" OR g.declined!="")
AND g.rewarded="" AND (g.guidUser='1' OR g.guidUserVersus='1'))
AND NOT (g.accepted!="" OR g.guidUserVersus='1')
ORDER BY g.guidUser, g.idGame
编辑:您需要使用或在条件内替换和
SELECT g.guidUser,u1.username,g.sent,g.accepted,g.declined,g.rewarded,g.guidUserVersus,u2.username AS usernameUserVersus,g.idGameVersus,g.timeFinal
FROM games g
INNER JOIN userdata u1 ON g.guidUser=u1.guidUser
INNER JOIN userdata u2 ON g.guidUserVersus=u2.guidUser
WHERE
((g.sent!="" OR g.accepted!="" OR g.declined!="")
AND g.rewarded="" AND (g.guidUser='1' OR g.guidUserVersus='1'))
AND NOT (g.accepted!="" OR g.guidUserVersus='1')
ORDER BY g.guidUser, g.idGame
在小提琴中尝试一下,它仍然没有选择4'的游戏记录,它应该返回预期的结果。要排除的记录需要同时满足这两个条件。但是,只有第二个是满意的。您需要将“AND”替换为“OR”。我将编辑我的回复。另外,第四条记录没有被选中,因为accepted不为空,并且您正在排除accepted不为空的所有记录。哎呀,不,您一开始是对的。数据中出现错误,第四条记录未对条件进行安全性验证(g.guidUser='1'或g.guidUserVersus='1'),谢谢!!还原,而不是或和答案fitstry它在小提琴,它仍然没有选择4'的游戏记录,它应该查询返回预期的结果。要排除的记录需要同时满足这两个条件。但是,只有第二个是满意的。您需要将“AND”替换为“OR”。我将编辑我的回复。另外,第四条记录没有被选中,因为accepted不为空,并且您正在排除accepted不为空的所有记录。哎呀,不,您一开始是对的。数据中出现错误,第四条记录未对条件进行安全性验证(g.guidUser='1'或g.guidUserVersus='1'),谢谢!!还原并替换为或,答案是正确的