因工作需要,目前研究出一种mysql 技能,与大家分享一下。
需求:关联查询另一个大表数据的某些(一个以上)字段
方案:因关联查询的表数据太大。多表查询影响效率,单个子查询又有些多余。所以采用多列拼接子查询,然后根据SUBSTRING_INDEX(SOURCE,SEPARETOR,INDEX+1)。
原理:子查询返回拼接列;函数截取还原列
可执行脚本:
SELECT
SUBSTRING_INDEX(temp.temp_column,”,”,1) showFirst,
SUBSTRING_INDEX(temp.temp_column,”,”,-1) showOver,
SUBSTRING_INDEX(SUBSTRING_INDEX(temp.temp_column,’,’,2),’,’,-1) showTwo,
temp.*
SELECT (
SELECT CONCAT_WS(‘,’,’12’,’23’,’34’,’45’)) temp_column) temp;
注意:本文来自博客园精华区。本站无法对本文内容的真实性、完整性、及时性、原创性提供任何保证,请您自行验证核实并承担相关的风险与后果!
CoLaBug.com遵循[CC BY-SA 4.0]分享并保持客观立场,本站不承担此类作品侵权行为的直接责任及连带责任。您有版权、意见、投诉等问题,请通过[eMail]联系我们处理,如需商业授权请联系原作者/原网站。
因工作需要,目前研究出一种mysql 技能,与大家分享一下。需求:关联查询另一个大表数据的某些(一个以上)字段方案:因关联查询的表数据太大。多表查询影响效率,单个子查询又有些多余。所以采用多列拼接子查询,然后根据SUBSTRING_INDEX(SOURCE,SEPARETOR,INDEX+1)。原理:子查询返回拼接列;函数截取还原列可执行脚本:SELECTSUBSTRING_INDEX(temp....
需求:关联查询另一个大表数据的某些(一个以上)字段
方案:因关联查询的表数据太大。多表查询影响效率,单个
子查询
又有些多余。所以采用
多列
拼接
子查询
,然后根据SUBSTRING_INDEX(SOURCE,SEPARETOR,INDEX+1)。
原理:
子查询
返回
拼接列;函数截取还原列
可执行脚本:
SELECT
今天看到一篇关于
MySQL
的IN
子查询
优化的案例,
一开始感觉有点半信半疑(如果是换做在SQL Server中,这种情况是绝对不可能的,后面会做一个简单的测试。)
随后动手按照他说的做了一个表来测试验证,发现
MySQL
的IN
子查询
做的不好,确实会导致无法使用索引的情况(IN
子查询
无法使用所以,场景是
MySQL
,截止的版本是5.7.18)
MySQL
的测试环境
测试表如下
create table test_table2
id int auto_increment primary key,
pay_id int,
pay_time datetime,
other_col
子查询
(普通
子查询
和关联
子查询
)
子查询
= 简单查询 + 限定查询 + 多表查询 + 统计查询的综合体;
所谓
子查询
:指的就是在一个查询之中嵌套了其他的若干查询,嵌套
子查询
之后的查询SQL语句如下:
SELECT [DISTINCT] *|分组字段1 [别名] [,分组字段2 [别名] ,…] | 统计函数 ,(
SELECT [DISTINCT] *|分组字段1 [别名]
1、
子查询
的定义
当一个查询是另一个查询的条件时,这个查询称为
子查询
。当查询需求比较复杂,一次性查询无法得到结果,需要进行多次查询时,就可以使用
子查询
。
子查询
一般分为WHERE
子
句
子查询
和FROM
子
句
子查询
WHERE
子
句
子查询
:该位置的
子查询
一般
返回
单行单列、单行
多列
、多行单列数据
FROM
子
句
子查询
:该位置的
子查询
一般
返回
多行
多列
数据,可以当做一张临时表
2、WHERE
子
句
子查询
psql:tests.sql:48: 错误: 作为一个表达式使用的
子查询
返回
了
多列
背景: SQL 语句 “SELECT (SELECT student FROM WaitingList WHERE course=OLD.course) IS NULL”
在IF的第23行的PL/pgSQL函数delete_function()
数据库运行后
返回
这个错误,不是很清楚这个错误是什么意思。
这个是我的数据库程序
我主要是想判断选课系统中的等待列表中是否有人存在,
想用IF ()NOT NULL 判断。
SELECT
#student_name取b表的(如果取的a表的student_name,该同学又恰好没一个及格,student_name就为NULL了)
b.`student_name`,
b.total_number,
a.numb
MySQL
中的WHERE IN
子查询
语句在某些情况下会走索引,具体取决于查询条件和索引类型。如果查询条件中的值和索引类型完全匹配,那么WHERE IN
子查询
就能够利用索引进行优化。
比如说,如果
查询语句
使用了B+树索引,同时WHERE IN
子查询
中的值位于索引树的同一层级,那么
MySQL
会使用该索引进行查询,并且能够快速定位到符合条件的行。对于其他类型的索引,如哈希索引或全文索引,WHERE IN
子查询
就无法走索引进行优化。
此外,还需要注意WHERE IN
子查询
中的值是否可以利用索引的有序性。如果查询条件中的值不是按照索引的顺序进行排序的,那么
MySQL
就无法充分利用索引的有序性,降低了查询效率。
总的来说,
MySQL
中的WHERE IN
子查询
语句在合适的条件下是能够走索引的,这也是优化查询效率的一种方法。但是,需要针对具体
查询语句
和索引类型进行分析,选择合适的优化策略。