3

我有以下查询。

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 条件,则查询有效。

4

1 回答 1

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%'
    ) 
...

您遇到的基本问题是 select 会返回多行,当它返回时,语句会爆炸,因为=只能处理一个值。

于 2012-10-27T18:37:28.943 回答