MySQL逻辑操作SELECT查询

标签 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 并收到许多因此错误:Error executing the SQL statement

接收 tag_id 数组的过程是什么?我知道此语句适用于单个 ID,因为如果我删除第二个 WHERE 条件,查询将起作用。

最佳答案

使用 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 会返回多行,当它返回时,语句会爆炸,因为 = 只能处理一个值。

关于MySQL逻辑操作SELECT查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13103004/

相关文章:

MYSQL - 如何查找哪个小时搜索次数最多

mysql - mysql 上的触发更新第二次运行

php - 检查日期是否过期 SQLite

sql - 在 SELECT INTO 语句中添加额外的列

mysql - 组合 INSERT SELECT 和 VARIABLES

sql - 如何从表中选择具有非空值的列?

mysql * 选择带有前缀的自定义列

mysql - 使用 INNER JOIN 的 SQL 查询无法正确排序。

php - 防止在 MySQL 中的 select 语句期间对变量进行计算

php - Mysql,PDO "rank"