【问题标题】:Mysql subquery return arrayMysql子查询返回数组
【发布时间】:2012-11-07 21:49:22
【问题描述】:

我需要有关 MySQL 中以下子查询的帮助

 SELECT ... # Main query 
...      
... IN # Start of subquery that expects to return an array of a.id 
(SELECT a.id, a.multipler 
FROM a 
JOIN b ON a.id = b.id
GROUP BY(a.id)
HAVING COUNT(b.id) * a.multipler < 5)

我想要实现的是对表 b (b.id) 中存在的所有 a.id 进行分组。 我想计算结果并为每个 a.id 使用一个唯一的乘法器(a.multipler)进行乘法运算。

这里的问题是我希望这是一个子查询:因此我不能有 2 个结果。不过,为了使用“HAVING”,我需要在结果集中包含每个变量。

我只想要/需要没有“a.multipler”的“a.id”作为结果。有什么想法可以解决这个问题吗?

示例代码:

#table a
+------+-------------+
| a_id | a_multipler |  
+------+-------------+
|    1 | 2.000       |
|    2 | 0.560       |
|    3 | 1.000       |
|    4 | 1.200       |
|    5 | 2.000       | 
+----- +-------------+
#table b
+------+
| b_id | 
+------+
|    1 |
|    1 | 
|    1 |
|    4 | 
|    4 |
|    3 | 
+------+

# a.id 1: occurance in "table b": 3 x 2.000 ("a.id"==1 "a.multipler"). Fails, result >= 5

#a.id 2: Fails, no occurance of a.id in "table b".

#a.id 3: 1 x 1.000. Result < 5 OK

# and so on... "id" in "table a" (but not in "table b") is unique, 
# also a "id" in "table b" have to exist in "table a".

给定上述查询 (a.id) 的所需结果:4,3
不想要的结果:

(a.id): 4,3

(a.multipler): 1.200, 1.000

【问题讨论】:

  • 一些示例数据在这里会很有帮助。例如,我根本看不到表 b 是如何进入您的查询的——您没有返回它,也没有对其进行操作;为什么加入它?错字?
  • 添加了有问题的样本。它也应该是 COUNT(b.id)...

标签: mysql subquery


【解决方案1】:

然后,将您的子查询包装在另一个 SELECT 中,只选择您需要的列:

SELECT ... # Main query 
...      
... IN
(SELECT pairs.id FROM               # <===          
    (SELECT a.id, a.multipler 
     FROM a 
     JOIN b ON a.id = b.id
     GROUP BY(a.id)
     HAVING COUNT(b.id) * a.multipler < 5) pairs)

任何(子)查询都会生成一个可以进一步操作的临时表,在这种情况下,只需选择其中列的子集即可。

【讨论】:

  • 不要只发布一段代码,请解释为什么这段代码可以解决所提出的问题。没有解释,这不是答案。
  • @Martijn 好的。取点。我现在添加了一些解释。最初我认为代码是为了回答“有什么想法可以解决这个问题吗?”
猜你喜欢
  • 2015-11-26
  • 2018-04-20
  • 2018-04-06
  • 2014-02-15
  • 2014-01-18
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多