1

我向 MySQL 询问其中一个字段是否包含 $Especialidad 变量中的某个单词。我在问这个词是否包含在几个变量之一中。我有以下代码,但那部分不起作用。

SELECT *
FROM   wp_consultte
WHERE  genero = '$Sexo'
        OR estadocivil = '$Civil'
           AND ( opc = '$Especialidad'
                  OR opd = '$Especialidad'
                  OR osp = '$Especialidad'
                  OR comisiones = '$Especialidad'
                  OR regulaciones = '$Especialidad'
                  OR programas = '$Especialidad'
                  OR regimenes = '$Especialidad'
                  OR ordenamiento = '$Especialidad'
                  OR negociadores = '$Especialidad'
                  OR logistica = '$Especialidad' ) 

谢谢

4

1 回答 1

1

使用“反向”IN子句:

SELECT *
FROM   wp_consultte
WHERE  genero = '$Sexo'
OR estadocivil = '$Civil'
AND '$Especialidad' in (opc, opd, osp, comisiones, ...)

请注意,如果任何列可以为空,则应将这些列包装起来ifnull(col,'')以确保列表中没有空值,否则您将无法获得匹配项(这正是 SQL 的工作方式)。


注意:OR不带括号使用时要小心!AND优先,并且很容易在没有括号的情况下错误地编码您的条件。

编辑:

如果你想使用LIKE而不是完全匹配,你可以这样做:

WHERE concat(opc, opd, osp, comisiones, ...) LIKE concat('%','$Especialidad','%')

这会将变量转换为类似模式的开放式模式,该模式匹配字符串中的任何位置。为了完全严格,您应该在列之间插入一个分隔符,否则它可以匹配从一个结尾到下一个开头的交叉。

于 2012-11-01T19:21:06.043 回答