2014-07-14 94 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

相关问题