2014-07-14 92 views
0

下面的查詢工作(下面的例子查詢)使用SELECT結果子查詢IN()

SELECT cat, dog, mouse, ids, 
    (SELECT cheese 
    FROM my_second_table AS a 
    WHERE a.ids IN (1,2,3,4,5,6,7,8,9,10) 
    LIMIT 1) AS cheese 
FROM my_first_table 

它給我回了5列用正確的數據,我期望,包括奶酪列。

以下查詢不起作用,奶酪柱總是空

SELECT cat, dog, mouse, ids, 
    (SELECT cheese 
    FROM my_second_table AS a 
    WHERE a.ids IN (ids) 
    LIMIT 1) AS cheese 
FROM my_first_table 

ids包含相同的逗號分隔的數字如在上面的第一查詢,在my_first_table從各行檢索。

我覺得這應該工作,我做錯了什麼。在子選擇IN()子句中使用SELECT結果是否可行?

+0

你能給如何存儲在'ids'價值? – Sadikhasan

+1

我猜'ids'是一個單一的字符串值。它不會那樣工作。 –

+0

@dragoste正確,爲什麼不呢?它只是'1,2,3,4,5,6,7,8,9,10' – superphonic

回答

2

嘗試FIND_IN_SET功能等

SELECT cat, dog, mouse, ids, 
    (SELECT cheese 
    FROM my_second_table AS a 
    WHERE find_in_set(a.ids, ids) 
    LIMIT 1) AS cheese 
FROM my_first_table 

IN接受列表或參數進行搜索,FIND_IN_SET接受包含逗號分隔的列表中的字符串參數。

在你的情況ids用逗號分隔字符串,所以find_in_set將真實IN條款返回false

+0

@superphonic試過這個答案? – Sadikhasan

+0

沒錯,這個作品!有什麼缺點嗎?有什麼性能差異,如果這和IN()' – superphonic

+0

之間有沒有任何性能差異,並檢查http://stackoverflow.com/questions/15656740/why-find-in-set-works-but-in-clauses以供參考 – Sadikhasan

相關問題