MySQL内部加入Where子句问题

时间:2018-01-23 13:20:40

标签: mysql sql join inner-join where-clause

有一个问题,我希望我能得到一些帮助。我写的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子句向我显示正确的结果。

测试数据:

enter image description here

2 个答案:

答案 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列?