我的表中刚好有个字段是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子句使用了子查询的结果。