我创建了一个过程,其中我的列值为enum datatype asCompleteness_Type`ENUM(' B',' I',' C',& #39; BC',' BI',' IC',' BIC')
我写了一个程序,我希望显示所有没有' I'在completeness_type列中。以下是我写的程序
USE `videogame_collection_3`;
DROP procedure IF EXISTS `Get_Info_By_Games_missing_Something`;
DELIMITER $$
USE `videogame_collection_3`$$
create PROCEDURE `Get_Info_By_Games_missing_Something`(IN Completenessip VARCHAR(15))
BEGIN
SELECT
video_game.Game_Name,
video_game.Genre,
mycollection.Purchase_Date,
mycollection.Purchase_Price,
mycollection.`Condition`,
platform.Platform_Name,
mycollection.Completeness_Type
FROM
video_game
INNER JOIN
video_game_platform_mycollection ON video_game.Game_Id = video_game_platform_mycollection.Game_Id
INNER JOIN
platform ON video_game_platform_mycollection.Platform_Id = platform.Platform_Id
INNER JOIN
mycollection ON video_game_platform_mycollection.MyCollection_Id = mycollect `enter code here`ion.MyCollection_Id
where mycollection.Completeness_Type not like concat('%',Completenessip,'%');
END
$$
DELIMITER ;
我用
调用程序 call Get_Info_By_Games_missing_Something('I'); --- **It is working**
call Get_Info_By_Games_missing_Something('BI'); -- **Not Working**
call Get_Info_By_Games_missing_Something('BIC'); --**not working**
对于第一个示例:调用Get_Info_By_Games_missing_Something(' I'); 我想显示completeness_type列,其中不包含' I'因此,completeenss_type列中的记录必须是' B' C',' BC'
第二个电话: 预期输出:调用Get_Info_By_Games_missing_Something(' BI'); 我想显示completeness_type列,其中不包含' B','我' ,' IC' IC'' BC',' BIC'因此,completenenss_type列中的记录必须是' C'
对于第三次通话:致电Get_Info_By_Games_missing_Something(' BIC'); 我想显示completeness_type列,其中不包含' B','我' C',' BI',' ; IC',' BC',' BIC'因此,completenenss_type列中的记录必须是无记录
那么,请问你能说出我犯的错误。我得到的查询适用于不包含' B',' I'或者' C'。我只想要不包含' BI'的行的结果。或者' B'或者'我'单独
提前致谢
答案 0 :(得分:0)
我对你的确切问题没有答案,但似乎可能有更好的方法。它有点不清楚您的值对应的是什么,但一个简单的方法是有三列,B
,I
和C
可能是BIT
类型。您可能成功存储它类似于Unix权限的存储方式;这样一个文件存储为BIC,因此B行将被编码为100,IC将读为011.根据几个因素,这可能比单个列更好,但作为一个袖手旁观的答案根据您的查询结果,我怀疑离散列将更容易编码。
然后,当然,要搜索包含BI的行,您可以搜索列WHERE `B`=1 AND `I`=1 AND `C`=0
,依此类推其他搜索。与使用ENUM字段相比,这将更好地扩展并且是更好的数据库设计。