2010-01-05 6 views
28

Tengo dos tablas Actividad y Acción. Se pueden realizar una o más acciones para una actividad. Y las relaciones entre Actividad y Acción se dan en una tercera tabla llamada Actividad Acción.Unir dos tablas según la relación definida en la tercera tabla

¿Cómo recupero un conjunto de resultados que me dice qué acción es aplicable para cada actividad utilizando una instrucción sql? Aquí está la estructura de la tabla

Tabla Actividad -ActivityId (PK), ActivityText

Acción Tabla - ActionID (PK), ActionText

ActivityAction -ActivityActionId (PK), ActivityID, ActionID

quiero una tabla resultante en el formato

Actividad, Acción aplicable

(la columna de la actividad debe mostrar ActivityText y Acción aplicable deben mostrar ActionText)

¿podría por favor me guía?

Gracias.

+0

http://en.wikipedia.org/wiki/Join_%28SQL%29 –

Respuesta

41

Esto debería hacer el truco

SELECT Activity.ActivityText as Activity, Action.ActionText as ApplicableAction 
FROM ActivityAction 
    INNER JOIN Activity 
     ON ActivityAction.ActivityId = Activity.ActivityId 
    INNER JOIN Action 
     ON ActivityAction.ActionId = Action.ActionId 

Debe leer sobre UNE en bases de datos. Aquí es un buen punto de partida:

http://en.wikipedia.org/wiki/Join_%28SQL%29

Básicamente lo que tenemos aquí es una relación muchos a muchos entre la actividad y la acción que se resuelve mediante dos relaciones uno-a-muchos que usan la una tabla de unión llamado ActivityAction.

para obtener los datos requeridos atrás, nos estamos uniendo ActivityAction a cada una de las mesas con el PK apropiado y columnas FK y luego elegir las columnas de cadena en el SELECT

2
SELECT ActivityText, ActionText 
FROM Activity 
JOIN ActivityAction ON Activity.ActivityId = ActivityAction.ActivityId 
JOIN Action ON ActivityAction.ActionId = Action.ActionId 
WHERE Activity.ActivityId = 1; 
0
SELECT ActivityText AS Activity, ActionText AS ApplicableAction 
    FROM Activity 
    JOIN ActivityAction on Activity.ActivityId = ActivityAction.ActivityID 
    JOIN Action on Action.ActionId = ActivityAction.ActionID 

Usted tiene identificadores en la tabla Acción y cuando se une a la tabla ActivityAction en la tecla ActivityId, puede unirse a la tabla de actividad

Cuestiones relacionadas