Note:
This topic has been translated from a Chinese forum by GPT and might contain errors.Original topic: 使用case when查询报错:Subquery returns more than 1 row

category_base.sql (89.1 MB)
category_team_developer_config.sql (6.0 MB)
【 TiDB Usage Environment】Test
【 TiDB Version】7.5
Table Structure:
CREATE TABLE `category_base` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`platformCode` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT 'Platform Code',
`siteCode` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT 'Site Name',
`categoryId` char(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT 'Category ID',
`parentId` char(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT 'Parent ID',
`categoryIdPath` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`categoryIdPathReverse` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`categoryName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT 'Category Name',
`categoryNamePath` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT 'Category Name Path',
`type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT 'Category Type (homePage: Home Page; newProductList: New Product List)',
`url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT 'Category URL',
`level` int unsigned NOT NULL DEFAULT '0' COMMENT 'Level',
`isDel` tinyint unsigned NOT NULL DEFAULT '0' COMMENT 'Is Deleted 1. Deleted 0. Not Deleted, default is 0',
`isLeaf` tinyint unsigned NOT NULL DEFAULT '0' COMMENT 'Has Subcategory 1. Yes 0. No',
`version` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT 'Version',
`createdTime` datetime NOT NULL DEFAULT '2000-01-01 00:00:00' COMMENT 'Creation Date',
`createdUser` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT 'Creator ID',
`updateTime` datetime NOT NULL DEFAULT '2000-01-01 00:00:00' COMMENT 'Last Update Time',
`updateUser` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT 'Updater',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_platform_site_level_type` (`platformCode`,`siteCode`,`categoryId`,`level`,`type`) USING BTREE,
KEY `idx_site_category` (`siteCode`,`categoryName`) USING BTREE,
KEY `idx_categoryId` (`categoryId`) USING BTREE,
KEY `idx_parentId` (`parentId`) USING BTREE,
KEY `idx_categoryIdPath` (`categoryIdPath`) USING BTREE,
KEY `idx_categoryIdPathReverse` (`categoryIdPathReverse`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=329579 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='category base';
CREATE TABLE `category_team_developer_config` (
`id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'Auto Increment ID',
`teamConfigId` int unsigned NOT NULL COMMENT 'Team Category Config ID',
`teamName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT 'Team Name',
`platform` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT 'Platform',
`site` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT 'Site',
`categoryId` char(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '0' COMMENT 'Category ID',
`level` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Category Level',
`parentCategoryId` char(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '0' COMMENT 'Parent Category ID',
`developer` varchar(5000) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT 'Developer, separated by commas',
`createTime` datetime NOT NULL DEFAULT '2000-01-01 00:00:00' COMMENT 'Config Creation Time',
`createUser` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT 'Config Creator',
`updateTime` datetime NOT NULL DEFAULT '2000-01-01 00:00:00' COMMENT 'Config Update Time',
`updateUser` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT 'Config Updater',
`isDel` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Is Deleted 1. Yes 0. No',
`delTime` datetime NOT NULL DEFAULT '2000-01-01 00:00:00' COMMENT 'Deletion Time',
`delUser` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT 'Deleter',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_t_p_s_c_d` (`teamName`,`platform`,`site`,`categoryId`,`delTime`) USING BTREE,
KEY `idx_platform` (`platform`) USING BTREE,
KEY `idx_site` (`site`) USING BTREE,
KEY `idx_categoryId` (`categoryId`) USING BTREE,
KEY `idx_teamConfigId` (`teamConfigId`) USING BTREE,
KEY `idx_del` (`isDel`) USING BTREE,
KEY `idex_teamName` (`teamName`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=56710 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='Team Category Developer Config';
Query SQL:
SELECT a.`teamConfigId`, a.`teamName`, a.`platform`,
CASE
WHEN a.platform = 'EB'
THEN (SELECT categoryIdPath FROM `category_base` WHERE isDel = 0 AND platformCode = a.platform AND siteCode = a.site AND categoryId = a.categoryId AND a.level = `level`)
WHEN a.platform = 'SM'
THEN (SELECT categoryIdPath FROM `category_base` WHERE isDel = 0 AND platformCode = a.platform AND siteCode = a.site AND categoryId = a.categoryId AND `type` = 'java' AND a.level = `level`)
WHEN a.platform = 'YA'
THEN (SELECT categoryIdPath FROM `category_base` WHERE isDel = 0 AND platformCode = a.platform AND siteCode = a.site AND categoryId = a.categoryId AND `type` = 'homePage' AND a.level = `level`)
WHEN a.platform = 'BB'
THEN (SELECT categoryIdPath FROM `category_base` WHERE isDel = 0 AND platformCode = a.platform AND siteCode = a.site AND categoryId = a.categoryId AND `type` = 'list' AND a.level = `level`)
END AS `categoryIdPath`
FROM
`category_team_developer_config` as `a`
WHERE
a.`isDel` = 0 AND (FIND_IN_SET('liupan', `developer`)) LIMIT 0,10
Error Message:
> 1242 - Subquery returns more than 1 row
> Time: 0.067s
The same table structure and data work fine in MySQL and DB2 databases, but it reports an error in TiDB. After checking the data, this error should not occur.
You can test this SQL and script data to see if my writing is problematic or if this is a bug.
Data:
category_base.sql (89.1 MB)
category_team_developer_config.sql (6.0 MB)