我有一个 SQL Fiddle 与我遇到问题的表创建和查询:http ://www.sqlfiddle.com/#!9/3404e/1
这是表创建脚本:
CREATE TABLE IF NOT EXISTS `collection` (
`id` bigint(20) unsigned NOT NULL,
`name` varchar(50) NOT NULL,
`label` varchar(120) NOT NULL,
`label_plural` varchar(120) NOT NULL);
INSERT INTO `collection` (`id`, `name`, `label`, `label_plural`) VALUES
(1, 'account', 'Account', 'Accounts');
CREATE TABLE IF NOT EXISTS `field` (
`id` bigint(20) unsigned NOT NULL,
`name` varchar(50) NOT NULL,
`label` varchar(120) NOT NULL,
`collection_id` bigint(20) unsigned NOT NULL);
INSERT INTO `field` (`id`, `name`, `label`, `collection_id`) VALUES
(1, 'name', 'Name', 1),
(2, 'state', 'State', 1);
CREATE TABLE IF NOT EXISTS `option` (
`id` bigint(20) unsigned NOT NULL,
`record_type_id` bigint(20) unsigned DEFAULT NULL,
`field_id` bigint(20) unsigned NOT NULL,
`value` varchar(120) NOT NULL);
INSERT INTO `option` (`id`, `record_type_id`, `field_id`, `value`) VALUES
(1, NULL, 2, 'CO'),
(2, NULL, 2, 'NE'),
(3, NULL, 2, 'BC'),
(4, NULL, 2, 'MB'),
(5, 1, 2, 'CO'),
(6, 1, 2, 'NE'),
(7, 2, 2, 'BC'),
(8, 2, 2, 'MB');
CREATE TABLE IF NOT EXISTS `record_type` (
`id` bigint(20) unsigned NOT NULL,
`name` varchar(120) NOT NULL,
`collection_id` bigint(20) unsigned NOT NULL);
INSERT INTO `record_type` (`id`, `name`, `collection_id`) VALUES
(1, 'US', 1),
(2, 'Canada', 1);
这是我要运行的查询:
select
`field`.`name`,
`field`.`label`,
ifnull(group_concat(`option`.`value` separator ';'), '') as `options`
from
`field`
join
`collection` on
`collection`.`id` = `field`.`collection_id`
join
`record_type` on
`record_type`.`collection_id` = `collection`.`id`
left join
`option` on
`option`.`record_type_id` = `record_type`.`id` and
`option`.`field_id` = `field`.`id`
where
`record_type`.`name` = 'US' and
`collection`.`name` = 'account';
我期待的是如下两行:
+-------+-------+---------+
| name | label | options |
+-------+-------+---------+
| name | Name | NULL |
| state | State | CO;NE |
+-------+-------+---------+
但我只收到状态行。如果我删除 group_concat 行,我会得到如下三行,所以我知道所有内容都会返回:
+-------+-------+--------+
| name | label | option |
+-------+-------+--------+
| name | Name | NULL |
| state | State | CO |
| state | State | NE |
+-------+-------+--------+