【问题标题】:MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'MySQL 还不支持 'LIMIT & IN/ALL/ANY/SOME 子查询'
【发布时间】:2017-11-14 23:50:03
【问题描述】:

当我运行这个查询时

SELECT * FROM 
tb_emp_daily_status d 
where 
d.shiftdate>='2017-06-07' and 
shiftdate<='2017-06-13' and 
emp_id in (SELECT id FROM tb_employee e WHERE e.user_id = '18145' LIMIT 20) 
order by d.id asc

如何在mysql中编写这个查询

【问题讨论】:

标签: mysql


【解决方案1】:

使用 INNER JOIN 代替 IN 子句

【讨论】:

    【解决方案2】:

    您可以将连接与子选择结果一起使用,而不是 IN 子选择

      SELECT * FROM 
      tb_emp_daily_status d 
      INNER JOIN ( 
        SELECT id FROM tb_employee e WHERE e.user_id = '18145' LIMIT 20
      ) t on d.emp_id = t.id
      where d.shiftdate>='2017-06-07' and 
      shiftdate<='2017-06-13' and 
      order by d.id asc
    

    【讨论】:

      【解决方案3】:

      试试这个:

        SELECT * FROM 
          tb_emp_daily_status d 
          where 
          d.shiftdate>='2017-06-07' and 
          shiftdate<='2017-06-13' and 
          emp_id in (SELECT * FROM (SELECT id FROM tb_employee e WHERE e.user_id = '18145' LIMIT 20)   
                as t)
          order by d.id asc
      

      【讨论】:

      • 我不明白为什么您的解决方案有效,但它仍然可以节省我的时间。谢谢。
      • @Lily 我也不明白它是如何工作的,但它确实有效,也拯救了我的一天。也谢谢你。
      • 当您需要将子查询连接到外部查询中的列时,这不起作用:这不起作用:emp_id in (SELECT * FROM (SELECT id FROM tb_employee e WHERE e.user_id = d .user_id LIMIT 20) as t)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-22
      • 2013-07-27
      • 1970-01-01
      • 2015-03-07
      相关资源
      最近更新 更多