好的,我正在使用找到的 states
表 here
...并且定义了一个表default_item
:
CREATE TABLE IF NOT EXISTS `default_item` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`States` varchar(200) NOT NULL DEFAULT '""'
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=637 ;
INSERT INTO `default_Item` (`id` `States`) VALUES
(636, '''AR'',''CA''');
我的表中有一个字段,其中包含州缩写列表,该字段是“States”,因此如果我选择其中一个字段作为示例:
SELECT `States`
FROM `default_item`
WHERE `id`=636
这通过 PHPMyAdmin 返回:
'AR','CA'
我希望能够将州缩写替换为上面引用的“州”表中的州名称。如果我使用:
SELECT group_concat( `state` )
FROM `state`
WHERE `state_abbr`
IN (
'AR', 'CA'
)
它有效!我得到:
Arkansas,California
但是如果我使用子查询...
SELECT group_concat( `state` )
FROM `state`
WHERE `state_abbr`
IN (
SELECT `States`
FROM `default_item`
WHERE `id`=636
)
...这将返回 NULL。
一直在寻找一些关于我做错了什么的提示,但似乎找不到窍门。大家有解决办法吗?
最佳答案
您的第一个查询返回一个字符串“AR,CA”,而不是两个字符串的列表。替换子查询时的复合查询实际上如下所示:
SELECT group_concat( `state` )
FROM `state`
WHERE `state_abbr`
IN (
"AR, CA"
)
这就是它不起作用的原因。
关于mysql - 子查询不起作用,但替换子查询结果可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12431917/