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の配列を受け取る手順は何ですか?2番目のWHERE条件を削除するとクエリが機能するため、このステートメントが単一のIDに対して機能することはわかっています。

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が複数の行を返すことでしたが、そうすると、=1つの値しか処理できないため、ステートメントが爆発しました。

于 2012-10-27T18:37:28.943 に答える