2012-09-14 108 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" 
) 

這就是爲什麼它不工作。