求一个SQL语句如何写

求一个MYSQL的SQL语句要如何写

建表语句:

CREATE TABLE test01 (
    iid      INT AUTO_INCREMENT PRIMARY KEY,
    sid      VARCHAR(20)  DEFAULT '' NULL,
    type_sid VARCHAR(100) DEFAULT '' NULL
);

插入数据SQL:

INSERT INTO test01 (iid, sid, type_sid) VALUES (1, 'byl', 'kh,gys');
INSERT INTO test01 (iid, sid, type_sid) VALUES (2, 'ts', 'kh');
INSERT INTO test01 (iid, sid, type_sid) VALUES (3, 'xd', 'gys');

我的目标:

制作一个存储过程,就一个传入参数,达到如下的效果

3.1. 当传入参数是 kh 时,可以查询出iid =1 和 iid = 2两笔数据
3.2. 当传入参数是 gys 时,可查出 iid = 1 和 iid = 3
3.3. 当传入参数是 kh,gys 或者 gys,kh时,可查出所有数据(总共就这3笔数据)
阅读 2.8k
4 个回答

存储过程

DELIMITER //

CREATE PROCEDURE p3(
    IN param varchar(20)
)
BEGIN
    DECLARE var1 varchar(10) DEFAULT '';
    DECLARE var2 varchar(10) DEFAULT '';
    Set var1 = substring_index(param, ',', 1);
    Set var2 = substring_index(param, ',', -1);
    select * from test01 where find_in_set(var1, `type_sid`) OR find_in_set(var2, `type_sid`);
END //

DELIMITER ;

调用

SET @p0='kh'; CALL `p3`(@p0);

多建几个表,不要用逗号的方式来储存。
你这是把mysql当excel用了,和我多年前一样幼稚,舍不得建表。

虽然你现在能用like来勉强查询
但是:

  1. 数据量增加造成的性能问题
  2. 数据结构复杂带来的查询问题
    a. 例如内容中包含分隔符;例如json,
    b. 例如需要用内容来join其他表,或者其他表要查询它是否被你引用

作为一个程序员,不要丢失信息,而你将一些数据合并成字符串放在一个字段中,就是在进行有损压缩,丢掉了数据记录之间的直接关联关系。

新手上路,请多包涵

如果你使用 PostgreSQL 的话,数组操作符 && 完全满足你的需求!PostgreSQL 文档

select * from test01 where type_sid like '%kh%'
select * from test01 where type_sid like '%gys%'
select * from test01 where type_sid like '%kh%' and type_sid like '%gys%'
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题