mysql - SQL:选择其他表中不存在的位置

标签 mysql sql join

我在每个表中都有相同的名称,但它仍然从配料表中选择它,即使确切的名称在 ingredients_master 表中。有什么想法吗?

SELECT
    `ingredients`.`id`,
    `ingredients`.`name` 
FROM
    `ingredients` 
WHERE
    `ingredients`.`name` LIKE '%makers%' ESCAPE '!' 
    OR `ingredients`.`name` LIKE '%jack%' ESCAPE '!' 
    OR `ingredients`.`name` LIKE '%hennesey%' ESCAPE '!' 
    OR `ingredients`.`name` LIKE '%bourbon%' ESCAPE '!' 
    OR `ingredients`.`name` LIKE '%RYE%' ESCAPE '!' 
    AND NOT EXISTS ( 
        SELECT * FROM ingredients_master WHERE ingredients.NAME = ingredients_master.NAME 
    ) 
GROUP BY
    `ingredients`.`name`

最佳答案

您的问题与您使用 ANDOR 运算符的方式有关:AND 的优先级高于 OR,所以这个:

WHERE
    `ingredients`.`name` LIKE '%makers%' ESCAPE '!' 
    OR `ingredients`.`name` LIKE '%jack%' ESCAPE '!' 
    OR `ingredients`.`name` LIKE '%hennesey%' ESCAPE '!' 
    OR `ingredients`.`name` LIKE '%bourbon%' ESCAPE '!' 
    OR `ingredients`.`name` LIKE '%RYE%' ESCAPE '!' 
    AND NOT EXISTS ( 
        SELECT * FROM ingredients_master WHERE ingredients.NAME = ingredients_master.NAME 
    ) 

实际上等同于:

WHERE
    `ingredients`.`name` LIKE '%makers%' ESCAPE '!' 
    OR `ingredients`.`name` LIKE '%jack%' ESCAPE '!' 
    OR `ingredients`.`name` LIKE '%hennesey%' ESCAPE '!' 
    OR `ingredients`.`name` LIKE '%bourbon%' ESCAPE '!' 
    OR (
        `ingredients`.`name` LIKE '%RYE%' ESCAPE '!' 
        AND NOT EXISTS ( 
            SELECT * FROM ingredients_master WHERE ingredients.NAME = ingredients_master.NAME 
        ) 
    )

因此,如果第一个 OR 条件中的任何一个为真,则结果为真,与 NOT EXIST 条件的结果无关。

你可能想要:

WHERE
    (
        `ingredients`.`name` LIKE '%makers%' ESCAPE '!' 
        OR `ingredients`.`name` LIKE '%jack%' ESCAPE '!' 
        OR `ingredients`.`name` LIKE '%hennesey%' ESCAPE '!' 
        OR `ingredients`.`name` LIKE '%bourbon%' ESCAPE '!' 
        OR `ingredients`.`name` LIKE '%RYE%' ESCAPE '!' 
    )
    AND NOT EXISTS ( 
        SELECT * FROM ingredients_master WHERE ingredients.NAME = ingredients_master.NAME 
    ) 

关于mysql - SQL:选择其他表中不存在的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54610363/

相关文章:

sql - Postgresql 合并行

sql - mysql 左连接和求和分组依据

php - 统计某表的记录并显示结果

mysql - 这个不寻常的 CREATE TABLE 语法是什么?

sql - 用于组织历史股票数据的数据库模式

sql - 如果存在逗号,则删除字符串中逗号后的所有字符

mysql - 尝试消除重复行的 SQL 查询

hadoop - 基准加入和数独

PHP - 无法访问数组值

MySQL 未在 HTML 中添加新行