2012-09-14 111 views
0

好吧,我现在用的是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'''); 

我有一个表中的字段包含国家缩写列表,该字段为“国家”,所以如果我选择这些领域的例子之一:

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。

一直在寻找一些暗示我做错了什么,但似乎无法找到窍门。任何人都有解决方案?

+0

了解default_item表的结构和内容是理解问题的关键。请分享它的定义和一些示例数据,就像你在状态表中做的那样。 –

回答

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

+0

我试过这个,并收到相同的NULL结果... – shamelesshacker

+0

试图使用SQL小提琴添加'default_item'表,但我得到一个错误 – shamelesshacker

1

你的第一个查询返回一个字符串“AR ,CA“,而不是两个字符串的列表。您的复合查询代子查询时,实际上是这样的:

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

这就是为什么它不工作。