我在表格中以varchar(255)的形式存儲數字列表,並且希望在另一個查詢的「IN()子句中使用此列表」我需要一些幫助讓MySql使用子查詢輸出一些結果
這裏是我的意思是:
表數據:
CREATE TABLE IF NOT EXISTS `session_data` (
`visible_portf_ids` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `session_data` (`visible_portf_ids`) VALUES
('45,44,658,659,661,45,44,658,659,661')
我想運行這樣的查詢返回的投資組合的 「QUERY#1」 的名單:
SELECT portfolio_hierarchy_id, account_id, name, leaf_node_portf_id
FROM portfolio_hierarchy
WHERE account_id = 1
AND leaf_node_portf_id IN
(
(SELECT visible_portf_ids
FROM session_data
WHERE username = 'ronedog')
)
ORDER BY name ASC
以上查詢的結果只返回1行,當總共有3行應該返回時。
如果我單獨運行子查詢是這樣的:
(SELECT visible_portf_ids
FROM session_data
WHERE username = 'ronedog')
它會返回像這樣的列表:
45,44,658,659,661,45,44,658,659,661
但是,當我運行上面的查詢#1,數據只有一行,它與「45」的「visible_portf_ids」相關聯被返回。
如果我更換這樣的硬編碼值的子查詢:
SELECT portfolio_hierarchy_id, account_id, name, leaf_node_portf_id
FROM portfolio_hierarchy
WHERE account_id = 1
AND leaf_node_portf_id IN (45,44,658,659,661,45,44,658,659,661)
ORDER BY name ASC
然後我得到的所有3行我很期待。
我猜MySql返回列表作爲一個字符串,因爲它存儲爲一個varchar(),所以它停止處理後發現第一個「visible_portf_ids」,這是「45」,但我不是非常肯定。
任何人有任何想法,我可以解決這個問題?
在此先感謝。
能否通過刪除嘗試'()'從子查詢 – 2011-03-11 05:37:30