# MySQL 查询小技巧

# 行转列

将类似 1,2,3 的字段查询得到3列,分别为:1,2,3

drop table if exists temp_numbers;

create table temp_numbers (
    id int,
    str varchar(20)
);

insert into temp_numbers(id, str) values (1, '1,2');
insert into temp_numbers(id, str) values (2, '1,2,3');
insert into temp_numbers(id, str) values (3, '1');
insert into temp_numbers(id, str) values (4, null);
insert into temp_numbers(id, str) values (5, '2,3');

-- select * from temp_numbers;

select
    temp_numbers.id,
    temp_numbers.str,
    substring_index(substring_index(temp_numbers.str, ',', numbers.Id), ',', -1) as split_str,
    numbers.Id as number_id
from
    temp_numbers
left join (select @r1 := @r1 + 1 as Id from temp_numbers join (select @r1 := 0) a limit 50) numbers
    on char_length(temp_numbers.str) - char_length(replace(temp_numbers.str, ',', '')) >= numbers.Id - 1
order by
    temp_numbers.id, numbers.Id
;

mysql-revert

# Join Update

UPDATE employees
    LEFT JOIN merits ON employees.performance = merits.performance
SET
    employees.salary = salary + salary * 0.015
WHERE
    merits.percentage IS NULL;

# 查看MySQL的版本

select version() from dual

Last Updated: 12/16/2020, 9:28:42 AM