0

好的,我正在使用此处states找到的表格

...和一个表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''');

我在包含州缩写列表的表中有一个字段,该字段是“州”,所以如果我选择其中一个字段作为示例:

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。

一直在寻找一些关于我做错了什么的提示,但似乎找不到诀窍。有人有解决方案吗?

4

2 回答 2

1

尝试这个

SELECT group_concat( `state` )
FROM `state`
WHERE `state_abbr`
IN (
SELECT `States` FROM `default_item` WHERE `id`='636')

'636'

你可以在这里活着问

http://sqlfiddle.com/#!2/7bd88/4

表 default_item 在哪里

于 2012-09-14T21:06:27.770 回答
1

您的第一个查询返回一个字符串“AR, CA”,而不是两个字符串的列表。替换子查询时的复合查询实际上如下所示:

SELECT group_concat( `state` )
FROM `state`
WHERE `state_abbr`
IN (
  "AR, CA"
)

这就是为什么它不起作用。

于 2012-09-14T21:06:29.380 回答