我希望这是一个相对简单的问题。我在数据库表中有一个事务列表,我想将一个枚举值 (y/n) 提取到该表中存在的每个摩托车制造商的列中。
我尝试了以下查询:
SELECT
accCode,
rnFuncBool(accCode,'HON') purchasedHonda,
rnFuncBool(accCode,'YAM') purchasedYamaha,
rnFuncBool(accCode,'KAW') purchasedKawsaki,
rnFuncBool(accCode,'SUZ') purchasedSuzuki,
rnFuncBool(accCode,'DUC') purchasedDucati,
rnFuncBool(accCode,'KTM') purchasedKTM,
rnFuncBool(accCode,'SYM') purchasedSym,
rnFuncBool(accCode,'VIC') purchasedVictory
FROM _emarsys_vehiclessold WHERE accCode<>'' GROUP BY accCode
函数 rnFuncBool 如下:
DELIMITER $$
USE `phcontacts`$$
DROP FUNCTION IF EXISTS `rnFuncBool`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `rnFuncBool`(
fnAccCode VARCHAR(6),
fnAccMan VARCHAR(3)
) RETURNS VARCHAR(1) CHARSET utf8
BEGIN
IF (SELECT COUNT(*) FROM _emarsys_vehiclessold WHERE accCode=fnAccCode COLLATE utf8_unicode_ci AND vehichleManufacturer=fnAccMan COLLATE utf8_unicode_ci )>0 THEN
RETURN 'y';
ELSE
RETURN 'n';
END IF;
END$$
DELIMITER ;
虽然这对于快速返回来说似乎是一个非常合乎逻辑的解决方案,但主表包含超过 48,000 行,因此执行时间在几分钟内。
我确实尝试在一个临时表上使用连接,但是当按客户帐户代码分组时,它只返回一个制造商。
当然我可以尝试 group_concat 但这不是我真正想要实现的。
如果有人对我如何实现这一目标有任何想法,那就太好了。
一如既往地提前感谢。
干杯格雷厄姆