執行此SELECT語句時,我收到「無效的組函數使用」錯誤。MySQL:嵌套GROUP_CONCAT
SELECT kits.id, kits.is_quote,
GROUP_CONCAT(
CONCAT_WS('|||', kits_table.id, kits_table.name,
GROUP_CONCAT(
CONCAT_WS('|', parts_table.id, parts_table.name)
SEPARATOR '||'),
GROUP_CONCAT(
CONCAT_WS('|', labor_table.id, labor_table.description)
SEPARATOR '||')
)
SEPARATOR '||||') as kits,
GROUP_CONCAT(CONCAT_WS('|', parts.id, parts.name) SEPARATOR '|||') as parts,
GROUP_CONCAT(CONCAT_WS('|', labor.id, labor.description) SEPARATOR '|||') as labor
FROM kits
LEFT JOIN kits as kits_table ON kits_table.kit_id = kits.id
LEFT OUTER JOIN parts as parts_table ON parts_table.kit_id = kits_table.id
LEFT OUTER JOIN labor as labor_table ON labor_table.kit_id = kits_table.id
LEFT OUTER JOIN parts ON parts.kit_id = kits.id
LEFT OUTER JOIN labor ON labor.kit_id = kits.id
WHERE kits.id = '1'
GROUP BY kits.id;
我需要能夠選擇數據庫的工具包,以及包內我需要查詢返回其他套件,部件和人工,與方程的包部分還返回部件和人工。如果我刪除這個GROUP_CONCAT(*) as kits
語句,那麼查詢工作正常。
當我使用這些表的要求是與主要信息的表,你需要:
創建表:
CREATE TABLE `kits` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`kit_id` int(11) DEFAULT NULL,
`is_quote` tinyint(4) NOT NULL DEFAULT '0',
`name` varchar(45) DEFAULT NULL,
`description` varchar(150) DEFAULT NULL,
`quantity` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`),
KEY `KIT` (`kit_id`)
)
CREATE TABLE `labor` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`kit_id` int(11) DEFAULT NULL,
`is_quote` tinyint(4) NOT NULL DEFAULT '0',
`description` varchar(150) NOT NULL,
`hours` varchar(45) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`),
KEY `KIT` (`kit_id`)
)
CREATE TABLE `parts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`kit_id` int(11) DEFAULT NULL,
`is_quote` tinyint(4) NOT NULL DEFAULT '0',
`name` varchar(45) DEFAULT NULL,
`description` varchar(150) DEFAULT NULL,
`sale_price` varchar(45) DEFAULT '0.00',
`quantity` varchar(45) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`),
KEY `KIT` (`kit_id`)
)
和INSERT語句:
INSERT INTO `kits`
(`id`,
`kit_id`,
`is_quote`,
`name`,
`description`,
`quantity`)
VALUES
(1,0,0,"Main Kit", "Sample Description",1);
INSERT INTO `kits`
(`id`,
`kit_id`,
`is_quote`,
`name`,
`description`,
`quantity`)
VALUES
(2,1,0,"Kit within kit", "Sample Description",1);
INSERT INTO `parts`
(`kit_id`,
`is_quote`,
`name`,
`description`,
`sale_price`,
`quantity`)
VALUES
(1,0,"First Kit Part 1", "Part description","23.5",1);
INSERT INTO `parts`
(`kit_id`,
`is_quote`,
`name`,
`description`,
`sale_price`,
`quantity`)
VALUES
(1,0,"First Kit Part 2", "Part description","23.5",1);
INSERT INTO `parts`
(`kit_id`,
`is_quote`,
`name`,
`description`,
`sale_price`,
`quantity`)
VALUES
(2,0,"Kit within kit part 1", "Sample Part Description","23.5",1);
INSERT INTO `parts`
(`kit_id`,
`is_quote`,
`name`,
`description`,
`sale_price`,
`quantity`)
VALUES
(2,0,"Kit within kit part 2", "Sample Part Description","23.5",1);
INSERT INTO `labor`
(`kit_id`,
`is_quote`,
`description`,
`hours`)
VALUES
(1,0,"First Kit labor 1","1.5");
INSERT INTO `labor`
(`kit_id`,
`is_quote`,
`description`,
`hours`)
VALUES
(1,0,"First Kit labor 2","1.5");
INSERT INTO `labor`
(`kit_id`,
`is_quote`,
`description`,
`hours`)
VALUES
(2,0,"Kit within kit labor 1","1.5");
INSERT INTO `labor`
(`kit_id`,
`is_quote`,
`description`,
`hours`)
VALUES
(2,0,"Kit within kit labor 2","1.5");
//Second Kit within kit.
INSERT INTO `kits`
(`id`,
`kit_id`,
`is_quote`,
`name`,
`description`,
`quantity`)
VALUES
(3,1,0,"Kit within kit 2", "Sample Description",1);
INSERT INTO `parts`
(`kit_id`,
`is_quote`,
`name`,
`description`,
`sale_price`,
`quantity`)
VALUES
(3,0,"Kit within kit part 1", "Sample Part Description","23.5",1);
INSERT INTO `parts`
(`kit_id`,
`is_quote`,
`name`,
`description`,
`sale_price`,
`quantity`)
VALUES
(3,0,"Kit within kit part 2", "Sample Part Description","23.5",1);
INSERT INTO `labor`
(`kit_id`,
`is_quote`,
`description`,
`hours`)
VALUES
(3,0,"Kit within kit labor 1","1.5");
INSERT INTO `labor`
(`kit_id`,
`is_quote`,
`description`,
`hours`)
VALUES
(3,0,"Kit within kit labor 2","1.5");
這裏是使用上述INSERT值的樣本輸出。另外請注意,試劑盒中可以有多個試劑盒,由||||分隔。
+----+----------+----------------------------------------------------------------------------------------------------------------------------+------------------+-------------------+
| id | is_quote | kits | parts | labor |
+----+----------+----------------------------------------------------------------------------------------------------------------------------+------------------+-------------------+
| 1 | 0 | 2|||Kit within kit|||2|Kit within kit part 1||3|Kit within kit part 2|||2|Kit within kit labor 1||3|Kit within kit labor 2 | 1|First Kit Part | 1|First Kit labor |
+----+----------+----------------------------------------------------------------------------------------------------------------------------+------------------+-------------------+
請減少到查詢的核心部件您的問題。 –
@juergend更好嗎? – forrestmid
你可以爲我做一個測試,我不能從我自己做。你能否以不同於表名的方式更改你的group_concat的別名? –