MySQL有些不对劲

时间:2016-06-29 17:08:23

标签: mysql

美好的一天,我遇到了这个命令行的问题:

    INSERT INTO oc_idai (name, language_id) 
SELECT 
    name, language_id
FROM 
    oc_product_description 
WHERE 
    (
        name LIKE '%0%' 
        OR name LIKE '%1%' 
        OR name LIKE '%2%' 
        OR name LIKE '%3%' 
        OR name LIKE '%4%' 
        OR name LIKE '%5%' 
        OR name LIKE '%6%' 
        OR name LIKE '%7%' 
        OR name LIKE '%8%' 
        OR name LIKE '%9%'
        AND language_id = '5'
    )

此代码无效。有2个字段,如名称 language_id 。如果没有其中一个字段,命令就完美无缺:

    INSERT INTO oc_idai (name) 
SELECT 
    name
FROM 
    oc_product_description 
WHERE 
    (
        name LIKE '%0%' 
        OR name LIKE '%1%' 
        OR name LIKE '%2%' 
        OR name LIKE '%3%' 
        OR name LIKE '%4%' 
        OR name LIKE '%5%' 
        OR name LIKE '%6%' 
        OR name LIKE '%7%' 
        OR name LIKE '%8%' 
        OR name LIKE '%9%'
    )

由于

2 个答案:

答案 0 :(得分:0)

如果没有关于' Not Working'的确切性质的任何其他信息,我猜你的问题是你的条件搞砸了。您希望名称与其中一个通配符字符串language_id = 5

匹配的所有内容

将其更改为:

 WHERE 
(
   ( name LIKE '%0%' 
    OR name LIKE '%1%' 
    OR name LIKE '%2%' 
    OR name LIKE '%3%' 
    OR name LIKE '%4%' 
    OR name LIKE '%5%' 
    OR name LIKE '%6%' 
    OR name LIKE '%7%' 
    OR name LIKE '%8%' 
    OR name LIKE '%9%' )
    AND language_id = '5'
)

答案 1 :(得分:0)

除了Ray有用的观察结果,您的or语句应该组合在一起 - 您的oc_idai表实际上是否有language_id字段?在“工作”查询中,未指定语言字段,这意味着它默认为null或模式指定的默认值。尝试insert进入不存在的字段是获得错误的可靠方法。

如果你把小提琴放在一起会有所帮助。如果没有看到您的架构,我们只能做出有根据的猜测。以下是schemaquery的有效版本:http://sqlfiddle.com/#!9/d6414/1将其与您自己的版本进行比较,以了解您可能出错的地方。