我的表中刚好有个字段是json格式,其中有个id需要做联表查询。如果直接解析json联表会影响性能,因为会全表的数据解json。所以我就用到子查询,但mysql select 中的只查询只能返回一个字段,想返回多个怎么办呢。
不费话,真接上代码
set @a:=null;
set @b:=null;
SELECT (SELECT CONCAT(@a:=CONCAT(t1.id),@b:=t2.name)
from t2
where t1.json->>'$.id'=t2.id
) as temp,
@a as id,
@b as name,
from t1
where t1.status=1
刚好在网上找到一位大神的骚操作
另外我刚好发现,如果直接把数字类型set进会话变量,字段会显示(BLOB)9 bytes,虽然并不知道会不会影响使用,但我还是把id转成字符串再set进去,这样就正常显示了。
Mysql select 中的子查询返回多个字段我的表中刚好有个字段是json格式,其中有个id需要做联表查询。如果直接解析json联表会影响性能,因为会全表的数据解json。所以我就用到子查询,但mysql select 中的只查询只能返回一个字段,想返回多个怎么办呢。不费话,真接上代码set @a:=null;set @b:=null;SELECT (SELECT CONCAT(@...
统计每本书打赏金额,不同时间的充值数据统计,消费统计,
设计四个表,book 书本表,orders 订单表 reward_log打赏表 consume_log 消费表 ,通过book_id与book表关联,
当关联超过两张表时导致统计时数据重复,只好用子查询查出来,子查询只能查一个字段,这里用CONCAT_WS函数将多个字段其拼接
查询代码如下
SELECT
b.id,
b.book_name,
sum( IF ( o.create_time > 0 && o.create_ti
MySQL 列子查询及 IN、ANY、SOME 和 ALL 操作符的使用
MySQL 列子查询
列子查询是指子查询返回的结果集是 N 行一列,该结果通常来自对表的某个字段查询返回。
一个列子查询的例子如下:
SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=1)
列子查询中使用 IN、ANY、SOME 和 ALL 操作符
由于列子查询返回的结果集是 N 行一列,因此不能直接使用 = > < >= <= <> 这些比较标量结果的操作符。在列子查询中可以使用 IN、ANY、SOME 和 ALL 操作符:
在查询的时候,有时候经常需要用到子查询,比如查询今天的订单数量, 7天的订单数量,31天的订单数量, 这种条件不一样,但是非要整在一个表中来显示就需要很多子查询来实现了:
select(select xx from xx where 条件一) as 结果一,
select(select xx from xx where 条件二) as 结果二,
select(select xx from...
这篇文章是对另一位大神的文章进行观点证实和补充的,源地址:https://blog.csdn.net/kankan231/article/details/47336733
我们先看看网上大神怎么描述的,
大概的形式是这样的:
select a .*,(select b.another_field from b where a.id=...
SELECT * FROM article WHERE (title,content,uid) IN (SELECT title,content,uid FROM blog)
查询返回结果如下所示:
该 SQL 的意义在于查找 article 表中指定的字段同时也存在于 blog 表中的所有的行(注意 = 比较操作符换成了 IN),实际上等同于下面的条件语句:
SELECT
例2. 查询学生在班的所有班级名字:
select name from classes where id in (select cls_id from students where cls_id is not null);
例3. 查找年龄最大,身高最高的学生:
SELECT column1, column2, column3
FROM table1
WHERE column1 IN (SELECT column1 FROM table2 WHERE condition);
在上面的查询中,子查询返回一个名为column1的字段,然后主查询选取了table1中的三个字段column1、column2和column3,并且WHERE子句使用了子查询的结果。