2012-10-27 75 views
3

我有以下查询。MySQL逻辑操作SELECT查询

SELECT 
    f.id, f.food_name, tm.resource_id, tm.tag_id, t.name 
FROM 
    tag as t, tagmap as tm 
JOIN 
    item as f 
    ON 
    (
    f.id = tm.resource_id AND tm.tag_id = 
     (
     SELECT 
      t.tag_id 
     FROM 
      tag as t 
     WHERE 
      t.name LIKE '%meat%' OR t.name LIKE '%vegan%' 
     ) 
    ) 
GROUP by f.id 

我相信错误是本着

f.id = tm.resource_id AND tm.tag_id = 

它正在寻找一个TAG_ID并接受许多这样的错误:错误执行SQL语句

的程序是什么接收tag_id的数组?我知道这个声明适用于单个ID,因为如果我删除第二个WHERE条件,查询就起作用了。

回答

2

使用IN关键字:

... 
AND tm.tag_id IN -- Changed = to IN here 
    (
    SELECT 
     t.tag_id 
    FROM 
     tag as t 
    WHERE 
     t.name LIKE '%meat%' OR t.name LIKE '%vegan%' 
    ) 
... 

你有基本的问题是,选择将返回多行,而当它没有,语句爆炸,因为=只能处理一个值。

+0

非常感谢,这解决了我的问题。 –