【问题标题】:MYSQL query with joins and WHERE condition not returning any rows带有连接和 WHERE 条件的 MYSQL 查询不返回任何行
【发布时间】:2018-04-04 20:37:35
【问题描述】:

我正在尝试运行与其他 2 个表连接的 SQL 查询。 但是,我仍然需要能够在使用主表 ID 的查询中使用 WHERE 条件。在这种情况下,主表是时间表。

我尝试了以下方法,但根本没有返回任何行:

   SELECT * FROM `timesheets` t 
   INNER JOIN `users` u ON `t`.`teacher_id` = `u`.`id` 
   INNER JOIN `schools` s ON `t`.`school_id` = `s`.`id` 
   WHERE t.id = 46

在此示例中,我尝试过滤到 ID 为 46 的行,确实存在。

如果我只使用与id = 46 相同的 where 条件对 timesheets 表进行简单查询,它将起作用并返回该特定行。

使用 EXPLAIN 时,我在“额外”列中收到此消息:

阅读 const table 后发现不可能 WHERE

任何想法我做错了什么?

【问题讨论】:

  • 用 t 替换 't'。对于别名,引号已过时。其他别名也一样
  • 在这种情况下使用反引号是完全必要的,topicstarter 应该将它们全部删除。
  • 先做左连接,确保 Schools 表的内连接不会阻塞

标签: mysql inner-join where


【解决方案1】:

由于您使用了 INNER JOIN ,因此仅当表用户和学校主键已在时间表中用作外键时才会返回数据。

使用左连接

SELECT * FROM timesheets t 
   LEFT JOIN users u ON t.teacher_id = u.id 
   LEFT JOIN schools s ON t.school_id = s.id 
   WHERE t.id = 46

【讨论】:

    猜你喜欢
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 2016-05-07
    • 2019-12-28
    • 1970-01-01
    相关资源
    最近更新 更多