php - full outer join oracle ejemplo
¿Por qué MySQL informa un error de sintaxis en FULL OUTER JOIN? (4)
SELECT airline, airports.icao_code, continent, country, province, city, website
FROM airlines
FULL OUTER JOIN airports ON airlines.iaco_code = airports.iaco_code
FULL OUTER JOIN cities ON airports.city_id = cities.city_id
FULL OUTER JOIN provinces ON cities.province_id = provinces.province_id
FULL OUTER JOIN countries ON cities.country_id = countries.country_id
FULL OUTER JOIN continents ON countries.continent_id = continents.continent_id
Dice que
Usted tiene un error en su sintaxis SQL; revise el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de ''outer join
airports
on airlines.iaco_code = airports.iaco_code full outer join'' en la línea 4
La sintaxis me parece correcta. Nunca he hecho muchas combinaciones antes, pero necesito esas columnas en una tabla a la que hacen referencia varias ID.
Acabo de hacer un truco para esto:
(select 1 from DUAL) d
LEFT OUTER JOIN t1 ON t1.id = t2.id
LEFT OUTER JOIN t2 ON t1.id = t2.id
el punto es que la consulta de dual hace un punto fijo, y mysql puede unir externamente las otras 2 tablas a esa
La respuesta de Cletus no es del todo correcta. UNION
eliminará los registros duplicados que incluiría un FULL OUTER JOIN
. Si necesita duplicados usando algo como:
SELECT * FROM t1
LEFT JOIN t2 ON t1.id = t2.id
LEFT JOIN t3 ON t2.id = t3.id
LEFT JOIN t4 ON t3.id = t4.id
UNION ALL
SELECT * FROM t1
RIGHT JOIN t2 ON t1.id = t2.id
LEFT JOIN t3 ON t2.id = t3.id
LEFT JOIN t4 ON t3.id = t4.id
WHERE t1.id IS NULL
UNION ALL
SELECT * FROM t1
RIGHT JOIN t2 ON t1.id = t2.id
RIGHT JOIN t3 ON t2.id = t3.id
LEFT JOIN t4 ON t3.id = t4.id
WHERE t2.id IS NULL
UNION ALL
SELECT * FROM t1
RIGHT JOIN t2 ON t1.id = t2.id
RIGHT JOIN t3 ON t2.id = t3.id
RIGHT JOIN t4 ON t3.id = t4.id
WHERE t3.id IS NULL;
No existe una FULL OUTER JOIN
en MySQL. Ver 7.2.12. Outer Join Simplification y dev.mysql.com/doc/refman/5.0/en/join.html dev.mysql.com/doc/refman/5.0/en/join.html :
Puedes emular
FULL OUTER JOIN
usando UNION (desde MySQL 4.0.0 en adelante):con dos tablas t1, t2:
SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id UNION SELECT * FROM t1 RIGHT JOIN t2 ON t1.id = t2.id
con tres tablas t1, t2, t3:
SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id LEFT JOIN t3 ON t2.id = t3.id UNION SELECT * FROM t1 RIGHT JOIN t2 ON t1.id = t2.id LEFT JOIN t3 ON t2.id = t3.id UNION SELECT * FROM t1 RIGHT JOIN t2 ON t1.id = t2.id RIGHT JOIN t3 ON t2.id = t3.id
Simplemente complete el caso cuando necesite FULL OUTER JOIN
tres tablas t1, t2, t3. Puede hacer que t1, t2, t3, a su vez, a la izquierda se una las otras dos tablas, luego unión.
SELECT * FROM t1
LEFT JOIN t2 ON t1.id = t2.id
LEFT JOIN t3 ON t1.id = t3.id
UNION
SELECT * FROM t2
LEFT JOIN t1 ON t2.id = t1.id
LEFT JOIN t3 ON t2.id = t3.id
UNION
SELECT * FROM t3
LEFT JOIN t1 ON t3.id = t1.id
LEFT JOIN t2 ON t3.id = t2.id