MySQL:不喜欢

lau*_*kok 57 mysql sql-like

我的数据库中有这些文字,

categories_posts
categories_news
posts_add
news_add
Run Code Online (Sandbox Code Playgroud)

我不想选择行categories,我使用这样的查询,

SELECT *
    FROM developer_configurations_cms

    WHERE developer_configurations_cms.cat_id = '1'
    AND developer_configurations_cms.cfg_variables LIKE '%parent_id=2%'
    AND developer_configurations_cms.cfg_name_unique NOT LIKE '%categories%'
Run Code Online (Sandbox Code Playgroud)

但它也会在输出中返回这两个......

categories_posts
categories_news
Run Code Online (Sandbox Code Playgroud)

如何在查询中忽略它们?

谢谢.

Dal*_*len 82

categories_postscategories_news从子字符串'categories_'开始,然后检查developer_configurations_cms.cfg_name_unique以'categories'开头,而不是检查它是否包含给定的子字符串.将所有内容翻译成查询:

SELECT *
    FROM developer_configurations_cms

    WHERE developer_configurations_cms.cat_id = '1'
    AND developer_configurations_cms.cfg_variables LIKE '%parent_id=2%'
    AND developer_configurations_cms.cfg_name_unique NOT LIKE 'categories%'
Run Code Online (Sandbox Code Playgroud)

  • '%' 不是零个或多个字符吗?至少在 Oracle 中是这样。OP 的原始查询应该根据预期进行工作。 (2认同)

Pio*_*iak 8

我不知道为什么

cfg_name_unique NOT LIKE '%categories%' 
Run Code Online (Sandbox Code Playgroud)

仍然会返回这两个值,但可能会将它们显式排除:

SELECT *
    FROM developer_configurations_cms

    WHERE developer_configurations_cms.cat_id = '1'
    AND developer_configurations_cms.cfg_variables LIKE '%parent_id=2%'
    AND developer_configurations_cms.cfg_name_unique NOT LIKE '%categories%'
    AND developer_configurations_cms.cfg_name_unique NOT IN ('categories_posts', 'categories_news')
Run Code Online (Sandbox Code Playgroud)