我在MariaDB语言中遇到此查询的问题。我想与相同的字段进行交叉,但有两个值。问题是我无法使用INTERSECT查询。
我该怎么做??我尝试过存在和内部连接,但它仍然无效。
SELECT nombre
FROM actores
WHERE codactor IN ( SELECT actor
FROM participacion
WHERE (titulo,año) IN (SELECT titulo, año
FROM peliculas
WHERE director IN (
SELECT coddirector
FROM directores d
WHERE d.nombre='Alejandro'
AND d.apellido='Amenabar')))
INTERSECT
SELECT nombre
FROM actores
WHERE codactor IN ( SELECT actor
FROM participacion
WHERE (titulo,año) IN (SELECT titulo,año
FROM peliculas
WHERE director in (
SELECT coddirector
from directores p
WHERE p.nombre='Pedro'
AND p.apellido='Almodobar')));
首先尝试这样,检查你有所有的演员。我必须添加编码器,以防你有同名的演员。
SELECT a.codactor, a.nombre -- add ', *' to see all columns and test query is ok.
FROM actores a
JOIN participacion p
ON a.codactor = p.actor
JOIN peliculas m
ON p.titulo = m.titulo
AND p.ano = m.ano
JOIN directores d
ON p.director = d.coddirector
WHERE (d.nombre = 'Alejandro' and d.apellido = 'Amenabar')
OR (d.nombre = 'Pedro' and d.apellido = 'Almodobar')
然后添加GROUP BY
以查看两位导演的电影中的哪位演员。
GROUP BY a.codactor, a.nombre
HAVING COUNT(DISTINCT coddirector) = 2
INTERSECT
是在MariaDB 10.3.0中引入的。
相交
交叉的结果是左右SELECT结果的交集,即只有两个结果集中存在的记录才会包含在操作结果中。
(SELECT e_name AS name, email FROM employees) INTERSECT (SELECT c_name AS name, email FROM customers);
至于你的查询,你可以保持原样。