我创建了一个过程,其中的列值具有枚举数据类型 asCompleteness_Type` ENUM('B', 'I', 'C', 'BC', 'BI', 'IC', 'BIC')
我编写了一个程序,我想显示在completeness_type列中没有“I”的所有视频游戏记录。下面是我写的程序
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'); 我想显示不包含“I”的completeness_type列,因此,completeness_type列中的记录必须是“B”,“C”,“BC”
对于第二次调用: 预期输出:调用 Get_Info_By_Games_missing_Something('BI'); 我想显示不包含'B','I','BI','IC','BC','BIC'的completeness_type列所以,completenenss_type列中的记录必须是'c'
第三次调用:调用 Get_Info_By_Games_missing_Something('BIC'); 我想显示不包含'B','I','C','BI','IC','BC','BIC'的completeness_type列所以,completenenss_type列中的记录必须是没有记录
那么,您能告诉我我犯了什么错误吗?我让这个查询适用于不只包含“B”、“I”或“C”的行。我只想要不单独包含“BI”或“B”或“I”的行的结果
提前致谢
最佳答案
我没有确切的答案,但似乎可能有更好的方法。有点不清楚您的值对应什么,但一种简单的方法是使用三列,B
、I
和 C
,它们可能是BIT
类型。您可能会成功存储它,类似于 Unix 权限的存储方式;例如,文件存储为 BIC,因此 B 类型的行将被编码为 100,IC 将读取 011。根据几个因素,这可能比各个列更好,但作为即兴答案根据您的查询的样子,我怀疑离散列会更容易编码。
然后,当然,要使用 BI 搜索行,您需要搜索列 WHERE `B`=1 AND `I`=1 AND `C`=0
等等其他搜索。与使用 ENUM 字段相比,这可以更好地扩展,并且是更好的数据库设计。
关于mysql - 如何识别和取消选择具有枚举数据类型的列的仅一个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34013879/