我有这个Mysql查询,它的工作原理:
SELECT
nom
,prenom
,(SELECT GROUP_CONCAT(category_en) FROM
(SELECT DISTINCT category_en FROM categories c WHERE id IN
(SELECT DISTINCT category_id FROM m3allems_to_categories m2c WHERE m3allem_id = 37)
) cS
) categories
,(SELECT GROUP_CONCAT(area_en) FROM
(SELECT DISTINCT area_en FROM areas c WHERE id IN
(SELECT DISTINCT area_id FROM m3allems_to_areas m2a WHERE m3allem_id = 37)
) aSq
) areas
FROM m3allems m
WHERE m.id = 37
结果是:
nom prenom categories areas
Man Multi Carpentry,Paint,Walls Beirut,Baalbak,Saida
它可以正确执行,但仅当我将所需的ID硬编码到查询中时(37)。我希望它适用于m3allem表中的所有条目,因此我尝试这样做:
SELECT
nom
,prenom
,(SELECT GROUP_CONCAT(category_en) FROM
(SELECT DISTINCT category_en FROM categories c WHERE id IN
(SELECT DISTINCT category_id FROM m3allems_to_categories m2c WHERE m3allem_id = m.id)
) cS
) categories
,(SELECT GROUP_CONCAT(area_en) FROM
(SELECT DISTINCT area_en FROM areas c WHERE id IN
(SELECT DISTINCT area_id FROM m3allems_to_areas m2a WHERE m3allem_id = m.id)
) aSq
) areas
FROM m3allems m
我得到一个错误:
“ where子句”中的未知列“ m.id”
为什么?从MySql手册中:
13.2.8.7. Correlated Subqueries
[...]
Scoping rule: MySQL evaluates from inside to outside.
所以…当子查询在SELECT部分中时,这不起作用吗?我什么都没读。
有人知道吗?我该怎么办?我花了很长时间来构建此查询…我知道这是一个庞然大物查询,但它在单个查询中就可以满足我的要求,而且我已经接近使它起作用!
有人可以帮忙吗?
您只能关联一个级别的深度。
采用:
SELECT m.nom,
m.prenom,
x.categories,
y.areas
FROM m3allens m
LEFT JOIN (SELECT m2c.m3allem_id,
GROUP_CONCAT(DISTINCT c.category_en) AS categories
FROM CATEGORIES c
JOIN m3allems_to_categories m2c ON m2c.category_id = c.id
GROUP BY m2c.m3allem_id) x ON x.m3allem_id = m.id
LEFT JOIN (SELECT m2a.m3allem_id,
GROUP_CONCAT(DISTINCT a.area_en) AS areas
FROM AREAS a
JOIN m3allems_to_areas m2a ON m2a.area_id = a.id
GROUP BY m2a.m3allem_id) y ON y.m3allem_id = m.id
WHERE m.id = ?
MySQL 提供了 BETWEEN AND 关键字,用来判断字段的数值是否在指定范围内。 BETWEEN AND 需要两个参数,即范围的起始值和终止值。如果字段值在指定的范围内,则这些记录被返回。如果不在指定范围内,则不会被返回。 使用 BETWEEN AND 的基本语法格式如下: [NOT] BETWEEN 取值1 AND 取值2 其中: NOT:可选参数,表示指定范围之外的值。如果字段值不满
问题内容: 我很好奇为何应该比更快地执行。 当比尔·卡尔文提出一个要点时,我正在回答一个问题。当您使用它时,它使用相关子查询(依赖子查询),而IN()仅使用子查询。 解释显示,并且两者都使用了一个依赖子查询,并且都只使用了一个子查询..所以我很好奇关联子查询如何比子查询更快? 我以前使用过EXISTS,它的执行速度比IN快,这就是我感到困惑的原因。 这是带有说明的SQLFIDDLE 一些问题 在上
问题内容: 我有一个Google Spreadsheet,我想运行一个函数。但是我希望该语句检查一系列值。我基本上是在寻找要在SQL中使用的语句-Google Spreadsheets中的等效语句是什么?所以现在我有: 那行得通。但是我真正需要的是: 当然,该声明会失败。如何获得一系列值的位置?这些是文本值,如果有区别的话。 问题答案: 大招Zolley!这是一个小改进。 代替: = CONCAT
可以对模型的查询和写入操作进行封装,例如: <?php namespace app\index\model; use think\Model; class User extends Model { public function scopeThinkphp($query) { $query->where('name','thinkphp')->field('i
我有这个问题。我希望它从内容表中选择4个条目,并按如下方式对条目进行排序: > 选择最近的条目。它表示按日期排序(mysql datetime)DESC,id DESC。 从这4个选定项中,按likes(mysql INT)DESC排序 运行查询时,它返回错误的结果。它选择与此条件匹配的条目,其中主题='id'和活动='1'。它按likes DESC对条目进行排序,但忽略了这个条件,即按日期DES
我对mongodb有意见。有人能解释一下为什么这样做(给出了一些结果): 这不起作用(返回零): 非常感谢。