【问题标题】:MySQL Inner Join with Where Clause IssueMySQL 内部联接与 Where 子句问题
【发布时间】:2018-01-23 13:20:40
【问题描述】:

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

测试数据:

【问题讨论】:

  • 编辑您的问题并提供示例数据和所需结果。
  • 数据是否可能不是您所期望的?这是我以前犯的错误。尝试返回 WHERE 子句中的字段,以便查看其中的内容。
  • 它总是返回最新的行,那里的数据完全符合预期,但问题是它只返回最新的行,而不是应用 where 子句。但我也通过删除内部连接测试了 where 子句,它工作正常
  • 另外我现在添加了一些测试数据
  • 抱歉造成混淆,但问题仍然是 where 子句似乎并不适用。但它适用于没有内连接的简单选择语句,但我需要使用内连接。

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


【解决方案1】:

出于某种原因,我怀疑您确实希望满足所有三个条件:

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;

【讨论】:

  • 不,我真的只是想检查一下它是否可能是这三个条件中的任何一个。
【解决方案2】:

您同时选择了 master_logins.liID 和 master_accounts.maID,因为它们已连接,所以查询结果的每一行中它们都应该相同,这让我认为这些可能不应该连接。您是否有一个 master_logins.maID 列应该用于连接?

【讨论】:

    猜你喜欢
    • 2011-07-13
    • 2018-10-17
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    相关资源
    最近更新 更多