mysql 视图查询,if或case问题

mysql 视图查询,if或case问题,第1张

听了你的意思,好像你应该在B表里面增加“0大家好”的记录,这叫做数据库的参照完整性。

还有,你的表B里面不应该有重复,id应该是它的主键。

对于满足上面条件的正常数据库,程序就非常简单。

对于表B里面有不存在的时候也返回数据,可以使用左连接实现,例如:

SELECT A.ID, CASE B.SHOW WHEN NULL THEN "大家好" ELSE B.SHOW END, SUBSTRING_INDEX(A.ARR,"#",2) FROM A LEFT JOIN B ON B.ID=SUBSTRING_INDEX(A.ARR,"#",1)

mysql的trigger还是有很多限制的地方:

1

一次只能定义一个触发动作。

create

trigger

or_sal

before

insert

on

teacher

for

each

row

--每次只定义一个吧

2

设置值必须使用set语句

set

new.sal

=

4000

--要加set

3

分隔符的问题

看是使用什么客户端工具,根据报错结果修正吧。有的工具对分隔符支持不好,可以在mysql命令行执行试下。

mysql 5.* 的版本现在没有split 函数,以下是几个自定义的split函数,供大家参考。先设置:SET GLOBAL log_bin_trust_function_creators = 11. 函数func_splitStringTotal:将字符串按指定方式分割,并计算单元总数

复制代码 代码如下:DELIMITER $$

CREATE FUNCTION `func_get_splitStringTotal`(

f_string varchar(10000),f_delimiter varchar(50)

) RETURNS int(11)BEGINreturn 1+(length(f_string) - length(replace(f_string,f_delimiter,'')))END$$DELIMITER 2.函数func_splitString:将字符串按指定方式分割,获取指定位置的数

复制代码 代码如下:DELIMITER $$

DROP function IF EXISTS `func_splitString` $$

CREATE FUNCTION `func_splitString`

( f_string varchar(1000),f_delimiter varchar(5),f_order int)

RETURNS varchar(255) CHARSET utf8

BEGINdeclare result varchar(255) default ''

set result = reverse(substring_index(reverse(substring_index(f_string,f_delimiter,f_order)),f_delimiter,1))

return resultEND$$SELECT func_splitString('1,2,3,4,5,6,7',',',1)3.过程splitString 将字符串分割,并放到临时表tmp_split 里面

复制代码 代码如下:DELIMITER $$

DROP PROCEDURE IF EXISTS `splitString` $$

CREATE PROCEDURE `splitString`

(IN f_string varchar(1000),IN f_delimiter varchar(5))BEGIN

declare cnt int default 0

declare i int default 0

set cnt = func_split_TotalLength(f_string,f_delimiter)

DROP TABLE IF EXISTS `tmp_split`

create temporary table `tmp_split` (`val_` varchar(128) not null) DEFAULT CHARSET=utf8while i <cntdoset i = i + 1


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/8373155.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存