【问题标题】:mysql pass value into subquery with in clausemysql 使用 in 子句将值传递给子查询
【发布时间】:2014-04-12 21:41:31
【问题描述】:

为什么这不起作用:

SELECT * 
FROM   `group` AS G, 
       (SELECT sum(`count`) 
        FROM   `counter` 
        WHERE  `id` IN (G.`ids`)) t 
WHERE  G.id = '1' 
LIMIT  1;

我在将 group.ids 值传递给子查询 IN 子句时遇到问题。

group.ids 字段的值为:

70,194,458,459,570,470

这可能吗?

我收到此错误:

“where 子句”中的未知列“G.ids”

【问题讨论】:

  • group.ids 在每一行中是否有逗号分隔的数值?
  • 是的,值是 70,194,458,459,570,470
  • 您只需要柜台上的sum(count) 吗?
  • pronox,我还需要 group 字段以及 sum(count) 作为额外字段。
  • 没有 Alma,group 同时拥有 idids 字段。

标签: mysql


【解决方案1】:

这是一个可以解决您的问题的查询,这里基本上您正在选择 group 的所有字段,并且仅从 counterFIND_IN_SET() 中选择 count 将匹配 c.id 与逗号分隔字符串中的任何值.

SELECT G.*, (SELECT sum(`count`) 
        FROM   `counter` c
        WHERE  FIND_IN_SET(c.`id`, G.`ids`)) 
    FROM `group` G        
    WHERE  G.id = 1
    LIMIT  1

Here 是您应该知道的关于FIND_IN_SET 的一些额外信息。

【讨论】:

  • 工作完美,谢谢。 FIND_IN_SET 是解决方案吗?我从来没有使用过这个功能。我猜这不能只用IN 完成?
  • @BeavisIsCool 可以,但首先您必须编写一个函数,该函数将接受字符串,使用逗号对其进行标记并在每行中返回值,因此这是一种长镜头,加上链接问题说FIND_IN_SET 没有针对索引进行优化,所以请记住这一点
  • @BeavisIsCool 顺便说一句,您的问题在某种程度上也帮助了我,感谢您提出一个好问题;)干杯
猜你喜欢
  • 2020-04-23
  • 2019-07-10
  • 2018-06-18
  • 2015-04-02
  • 1970-01-01
  • 1970-01-01
  • 2018-07-17
  • 1970-01-01
相关资源
最近更新 更多