sql >> Base de Datos >  >> RDS >> Database

Cómo unirse en varias columnas

Problema:

Desea unir tablas en varias columnas usando una clave compuesta principal en una tabla y una clave compuesta externa en otra.

Ejemplo:

Nuestra base de datos tiene tres tablas llamadas student , enrollment y payment . El student la tabla tiene datos en las siguientes columnas:id (clave principal), first_name y last_name .

id nombre apellido
1 Ellie Willson
2 Tom Marrón
3 Sandra Molinero

La enrollment la tabla tiene datos en las siguientes columnas:clave principal (student_id y course_code ), is_active y start_date .

student_id código_del_curso es_activo fecha_inicio
1 GD03 verdadero 2020-01-20
1 AP01 falso 2020-03-10
2 SL01 verdadero 2020-05-05
3 SL01 verdadero 2020-06-01

El payment la tabla tiene datos en las siguientes columnas:clave externa (student_id y course_code , las claves primarias de la enrollment tabla), status y amount .

student_id código_del_curso estado cantidad
1 GD03 pagado 230
1 AP01 pendiente 100
2 SL01 pendiente 80
3 SL01 pendiente 110

Mostremos el nombre de cada estudiante, el código del curso y el estado y monto del pago.

Solución:

SELECT
  s.last_name, s.first_name,
  p.course_code, p.status, p.amount
FROM enrollment e
JOIN student s
  ON s.id=e.student_id
JOIN payment p
  ON p.course_code=e.course_code
	AND p.student_id=e.student_id;
apellido nombre código_del_curso estado cantidad
Willson Ellie GD03 pagado 230
Willson Ellie AP01 pendiente 100
Marrón Tom SL01 pendiente 80
Molinero Sandra SL01 pendiente 110

Discusión:

Si desea que los datos almacenados en tablas se unan mediante una clave compuesta que es una clave principal en una tabla y una clave externa en otra tabla, simplemente use una condición de unión en varias columnas.

En una tabla unida (en nuestro ejemplo, enrollment ), tenemos una clave principal construida a partir de dos columnas (student_id y course_code ). En la segunda tabla (payment ), tenemos columnas que son una clave compuesta externa (student_id y course_code ). ¿Cómo podemos unir las tablas con estas claves compuestas?

¡Fácil! Solo necesitamos usar un JOIN cláusula con más de una condición usando el operador AND después de la primera condición. En nuestro ejemplo, usamos esta condición:

p.course_code=e.course_code AND p.student_id=e.student_id

En la primera parte, usamos el student_id columna de la enrollment tabla y student_id del payment mesa. En la siguiente condición, obtenemos el course_code columna de la enrollment tabla y course_code del payment mesa.

Tenga en cuenta que el student_id y course_code las columnas forman una clave principal en la enrollment mesa. Por lo tanto, se utilizan en el payment tabla como clave externa.