有一个问题,我希望我能得到一些帮助。我写的MySQL语句似乎完全忽略了where子句:
SELECT `master_logins`.liID, `master_accounts`.maID, `master_accounts`.maUsername
FROM `master_logins`
INNER JOIN `master_accounts` ON `master_logins`.liID = `master_accounts`.maID
WHERE `master_logins`.liClientName = 'asfasf'
OR `master_logins`.liIP = '127.0.0.1'
OR `master_logins`.liSocialClub = 'name'
ORDER BY `master_logins`.`liID` DESC
LIMIT 1
此代码倾向于列出最新结果,无论是否满足where条件。我已经盯着它多年了,看不出问题。
尝试将where子句设置为只有1个条件而且没有使用内部联接,当我删除内部联接时,它会根据我的where子句向我显示正确的结果。
测试数据:
答案 0 :(得分:0)
出于某种原因,我怀疑你确实希望满足所有这三个条件:
SELECT ma.maID, ma.maUsername
FROM master_logins ml INNER JOIN
master_accounts ma
ON ml.liID = ma.maID
WHERE ml.liClientName = 'asfasf' OR ml.liIP = '127.0.0.1' OR ml.liSocialClub = 'name'
GROUP BY ma.maID, ma.maUsername
HAVING SUM(ml.liClientName = 'asfasf') > 0 AND
SUM(ml.liIP = '127.0.0.1') > 0 AND
SUM(ml.liSocialClub) > 0
ORDER BY ma.maID DESC
LIMIT 1;
答案 1 :(得分:0)
你要同时选择master_logins.liID和master_accounts.maID,它们在查询结果的每一行都应该是相同的,因为它们已加入,这让我觉得这些不应该加入。您是否有任何机会拥有一个应该用于连接的master_logins.maID列?