Hola Marea2:
En primer lugar, desde mi punto de vista tienes un mal modelo de tablas... si tienes una relación n a m, como es el caso, ya que n profesores pueden impartir m materias, el modelo correcto es tener tres tablas, una para los profesores, otra para las materias y otra para relacionar ambas tablas... tal como lo tienes, nada te impide que tengas algo como esto:
Código MySQL:
Ver original+------+-----------+--------+--------+--------+--------+
| id | municipio | asign1 | asign2 | asign3 | asign4 |
+------+-----------+--------+--------+--------+--------+
| 100 | 3 | mate | mate | mate | mate |
+------+-----------+--------+--------+--------+--------+
es decir, un maestro que la misma materia en todas los campos... y qué pasa si un maestro imparte sólo 1 materia... ¿dejas los otros campos como NULL? o qué pasa si imparte más de cuatro materias... ¿lo truncas solo a cuatro? si haces cualquiera de esto es un algo terrible, si fueras estudiante de diseño de bases de datos estarías reprobad@ y si fueras emplead@ de una empresa, serías despedid@.
Pero bueno, ese es un tema que no tiene nada que ver con lo que preguntas... la consulta la puedes hacer de muchas formas... por ejemplos puedes hacer una suma condicional, algo asi:
Código MySQL:
Ver original+------+-----------+--------+--------+--------+--------+
| id | municipio | asign1 | asign2 | asign3 | asign4 |
+------+-----------+--------+--------+--------+--------+
| 100 | 3 | mate | quim | biol | diss |
| 101 | 3 | quim | lles | diss | mate |
| 102 | 3 | mate | llca | lica | fisi |
| 103 | 3 | diss | llca | lica | fisi |
| 104 | 4 | quim | fisi | diss | biol |
+------+-----------+--------+--------+--------+--------+
-> id
, SUM(IF(asign1
IN ('mate', 'quim', 'biol'), 1, 0) + -> IF(asign2
IN ('mate', 'quim', 'biol'), 1, 0) + -> IF(asign3
IN ('mate', 'quim', 'biol'), 1, 0) + -> IF(asign4
IN ('mate', 'quim', 'biol'), 1, 0) -> ) total
+------+-------+
| id | total |
+------+-------+
| 100 | 3 |
| 101 | 2 |
| 102 | 1 |
+------+-------+
es decir, verificas si cada uno de los campos donde almacenas las materias tiene alguna de las materias y los vas contando, (suma 1 si existe la materia y 0 si no). con el WHERE filtras sólo los profesores para el municipio que quieres y con el HAVING filtras aquellos profesores que no imparten ninguna de las materias.
Dale un vistazo y espero que te sirva.
@jlct: es terriblemente ineficiente el usar tantos OR's... en su defecto utiliza IN, tiene el mismo efecto, pero la consulta es mas simple.
Saludos
Leo.