这个带有NOT LIKE语句的SQL查询有什么问题?

时间:2016-09-11 11:46:59

标签: php mysql sql

SELECT * 
FROM combinazioni
WHERE (
    sesso = '3'
    OR sesso = 'f'
)
AND (
    menopausa = '3'
    OR menopausa = '1'
)
AND (
    ipert_a = '3'
    OR ipert_a = '1'
)
AND (
    obesita = '3'
    OR obesita = '1'
)
AND (
    LOWER( i_alimento ) NOT LIKE '%ricotta%'
    OR LOWER( ii_alimento ) NOT LIKE '%ricotta%'
    OR LOWER( iii_alimento ) NOT LIKE '%ricotta%'
    OR LOWER( iv_alimento ) NOT LIKE '%ricotta%'
    OR LOWER( v_alimento ) NOT LIKE '%ricotta%'
)
ORDER BY rilevanza_1 DESC 

我不明白这个问题。为什么这个查询不起作用? 我尝试在PHPMyAdmin中执行此代码,但它没有给我我想要的记录。查询不会给出任何错误,但会返回带有“ricotta”的记录。

我希望此查询向我显示i_alimentoii_alimentoiii_alimento,{iv_alimentov_alimentoreturn this.http.put('/mandators/' + mandator.uuid, {name: mandator.name}) .map(res => { console.log(res.status); res.json(); }) .catch((error: any) => { console.log(error.status); return Observable.throw(new Error(error.status)); }); 中有“ricotta”的记录{1}},200字段。

2 个答案:

答案 0 :(得分:3)

我很确定您需要and而不是or。但是,您应该使用in并简化整个where子句:

WHERE sesso IN ('3', 'F') AND
      menopausa IN ('1', '3') AND
      ipert_a IN ('1', '3') AND
      obesita IN ('1', '3') AND
      (LOWER(i_alimento) NOT LIKE '%ricotta%' AND
       LOWER(ii_alimento) NOT LIKE '%ricotta%' AND
       LOWER(iii_alimento) NOT LIKE '%ricotta%' AND
       LOWER(iv_alimento) NOT LIKE '%ricotta%' AND
       LOWER(v_alimento) NOT LIKE '%ricotta%'
      )

这会检查五个“alimento”中任何的“ricotta”是否出现。如果您使用or,那么它只检查其中一个不包含'ricotta'

此外,如果您确定自己确实需要OR,则应该在条件周围加上括号。

答案 1 :(得分:0)


您可以使用此查询

    SELECT * 
    FROM combinazioni
    WHERE 
    sesso =  '3' OR sesso =  'f'
    AND 
    menopausa =  '3' OR menopausa =  '1'
    AND 
    ipert_a =  '3' OR ipert_a =  '1'
    AND 
    obesita =  '3' OR obesita =  '1'
    AND 
    LOWER(i_alimento) NOT LIKE  '%ricotta%'
    OR LOWER(ii_alimento) NOT LIKE  '%ricotta%'
    OR LOWER(iii_alimento) NOT LIKE  '%ricotta%'
    OR LOWER(iv_alimento) NOT LIKE  '%ricotta%'
    OR LOWER(v_alimento) NOT LIKE  '%ricotta%'
    ORDER BY rilevanza_1 DESC ; 

您还可以使用提供完美结果的IN功能。

    SELECT * 
    FROM combinazioni
    WHERE 
    sesso in ('3','f') AND 
    menopausa in ('3','1') AND 
    ipert_a in ('3','1') AND 
    obesita in ('3','1') AND 
    LOWER(i_alimento) NOT LIKE  '%ricotta%'
    OR LOWER(ii_alimento) NOT LIKE  '%ricotta%'
    OR LOWER(iii_alimento) NOT LIKE  '%ricotta%'
    OR LOWER(iv_alimento) NOT LIKE  '%ricotta%'
    OR LOWER(v_alimento) NOT LIKE  '%ricotta%'
    ORDER BY rilevanza_1 DESC ; 

希望它对你有用。任何让我知道的问题都会对你有帮助。