¿Cómo realizar la interseccion en phpmyadmin?

Quiero realizar una consulta en phpmyadmin pero MariaDB no soporta la intersección y no se como hacer la siguiente consulta.

Pretendo obtener la raza y el nombre de los caballos que su disciplina sea salto fondo y también salto vertical, hay que realizarlo en dos tablas diferentes que se encuentran unidas por dos campos que en una se llama Cod y en la otra Caballo he intentado hacer la siguiente consulta pero no me sale ningún campo.

SELECT c.Raza, c.Nombre 
FROM caballos c JOIN caballodisciplina d 
ON c.Cod = d.Caballo 
WHERE d.Disciplina IN ('Salto fondo','Salto vertical') 
GROUP BY c.Raza, c.Nombre 
HAVING COUNT(DISTINCT c.Cod) = 2

Las tablas que utilizadas son las que se pueden ver en las siguientes imagenes:

introducir la descripción de la imagen aquí introducir la descripción de la imagen aquí

Y debería de salir el siguiente resultado

+------------+------------+
| Nombre     | Raza       |
+------------+------------+
| Starlaight | Andaluz    |
+------------+------------+
3
задан 28.12.2016, 17:32
0 ответов

Если я понимаю хорошо, ты хочешь лошадей, у которых есть точно 2 дисциплины Salto fondo и Salto vertical, ни больше, ни меньше.

Если это - то, что ты просишь, способ делать консультацию таким образом. Ощутись, что логика концентрируется на claúsula HAVING:

SELECT c.Raza, c.Nombre 
  FROM caballos c
  JOIN caballodisciplina d 
    ON c.Cod = d.Caballo 
 GROUP BY c.Cod, c.Raza, c.Nombre
HAVING COUNT(DISTINCT d.Disciplina) = 2
   AND COUNT(CASE WHEN d.Disciplina = 'Salto fondo' THEN 'X' END) > 0
   AND COUNT(CASE WHEN d.Disciplina = 'Salto vertical' THEN 'X' END) > 0

Если с другой стороны, желание состоит в том, чтобы консультация возвратила лошадей, у которых, по крайней мере, есть эти 2 дисциплины, но что могла у других быть кроме того, тогда консультация, он мог быть просто:

SELECT c.Raza, c.Nombre 
  FROM caballos c
  JOIN caballodisciplina d 
    ON c.Cod = d.Caballo 
 GROUP BY c.Cod, c.Raza, c.Nombre
HAVING COUNT(DISTINCT CASE WHEN d.Disciplina IN ('Salto fondo','Salto vertical') THEN d.Disciplina END) = 2

... или возможно немного проще:

SELECT c.Raza, c.Nombre 
  FROM caballos c
  JOIN caballodisciplina d 
    ON c.Cod = d.Caballo
   AND d.Disciplina IN ('Salto fondo','Salto vertical')
 GROUP BY c.Cod, c.Raza, c.Nombre
HAVING COUNT(DISTINCT d.Disciplina) = 2
1
ответ дан 03.12.2019, 17:57