Tengo tres tablas nombradas
**Student Table**
-------------
id name
-------------
1 ali
2 ahmed
3 john
4 king
**Course Table**
-------------
id name
-------------
1 physic
2 maths
3 computer
4 chemistry
**Bridge**
-------------
sid cid
-------------
1 1
1 2
1 3
1 4
2 1
2 2
3 3
3 4
4 1
4 2
Ahora para mostrar el nombre del estudiante con el nombre del curso que había estudiado,
**Result**
---------------------------
Student Course
---------------------------
ahmed physic
ahmed maths
ahmed computer
ahmed chemistry
ali physic
ali maths
john computer
john chemistry
king physic
king maths
Construyo la siguiente consulta
select s.name as Student, c.name as Course from student s, course c join bridge b on c.id = b.cid order by s.name
Pero no devuelve el resultado requerido ...
Y lo que sería para la forma normalizada, si quiero encontrar quién es gerente sobre otro:
**employee**
-------------------
id name
-------------------
1 ali
2 king
3 mak
4 sam
5 jon
**manage**
--------------
mid eid
--------------
1 2
1 3
3 4
4 5
Y quiere obtener este resultado:
**result**
--------------------
Manager Staff
--------------------
ali king
ali mak
mak sam
sam jon
Respuestas:
Simplemente use:
fuente
Use la sintaxis ANSI y será mucho más claro cómo se une a las tablas:
fuente
ANSI
sintaxis, vale la pena aprenderla. Le ayudará a evitarJOIN
errores como los que haya cometido en el futuro.Para normalizar la forma
fuente
m.mid = e1.id
ym.eid = e2.id
?fuente
Puede UNIR varias TABLAS como en este ejemplo anterior.
fuente
Consulta para unir más de dos tablas:
fuente
Utilizar este:
fuente
No te unas así. ¡Es una práctica realmente mala! Ralentizará el rendimiento en la obtención de datos masivos. Por ejemplo, si hay 100 filas en cada tabla, el servidor de la base de datos tiene que buscar
100x100x100 = 1000000
tiempos. Tuvo que buscar por1 million
tiempos. Para superar ese problema, únase a las dos primeras tablas que pueden obtener el resultado de la mínima coincidencia posible (depende del esquema de su base de datos). Use ese resultado en Subconsulta y luego únalo con la tercera tabla y recójalo. Para la primera combinación ->100x100= 10000
veces y supongamos que obtenemos 5 resultados coincidentes. Y luego nos unimos a la tercera tabla con el resultado ->5x100 = 500.
Total fetch =10000+500 = 10200
times only. Y así, ¡¡¡la actuación subió !!!fuente