Hola suxor:
Hay varias alternativas para este escenario, dependiendo de tu lógica de negocio. Veamos algunos hechos...
En primer lugar, si TODAS las actividades deben tener asignadas un RESPONSABLE y ese responsable tiene que ser un socio, entonces basta con que agregues una Llave Foránea a tu tabla de actividades hacia la tabla de socios, es decir, tendrías tu información más o menos asi:
Código SQL:
Ver originalSELECT * FROM socios;
+----------+--------------+
| id_socio | nombre_socio |
+----------+--------------+
| 1 | socio 1 |
| 2 | socio 2 |
| 3 | socio 3 |
+----------+--------------+
SELECT * FROM actividades;
+--------------+----------+------------------+
| id_actividad | id_socio | nombre_actividad |
+--------------+----------+------------------+
| 1 | 3 | actividad 1 |
| 2 | 1 | actividad 2 |
| 3 | 2 | actividad 3 |
+--------------+----------+------------------+
SELECT a.id_actividad, a.nombre_actividad, s.nombre_socio AS responsable
FROM actividades a
INNER JOIN socios s ON a.id_socio = s.id_socio
ORDER BY a.id_actividad;
+--------------+------------------+-------------+
| id_actividad | nombre_actividad | responsable |
+--------------+------------------+-------------+
| 1 | actividad 1 | socio 3 |
| 2 | actividad 2 | socio 1 |
| 3 | actividad 3 | socio 2 |
+--------------+------------------+-------------+
Ahora bien, si no todas las actividades deben tener asignado un responsable, entonces lo que tienes que hacer es crear una tabla adicional que relaciones las actividades que si tienen responsables, incluyendo las llaves foráneas hacia la actividad y el socio, es decir, algo como esto:
Código SQL:
Ver originalSELECT * FROM socios;
+----------+--------------+
| id_socio | nombre_socio |
+----------+--------------+
| 1 | socio 1 |
| 2 | socio 2 |
| 3 | socio 3 |
+----------+--------------+
SELECT * FROM actividades;
+--------------+------------------+
| id_actividad | nombre_actividad |
+--------------+------------------+
| 1 | actividad 1 |
| 2 | actividad 2 |
| 3 | actividad 3 |
+--------------+------------------+
SELECT * FROM socios_actividades;
+--------------------+--------------+----------+
| id_actividad_socio | id_actividad | id_socio |
+--------------------+--------------+----------+
| 1 | 1 | 3 |
| 2 | 3 | 2 |
+--------------------+--------------+----------+
SELECT a.id_actividad, a.nombre_actividad, s.nombre_socio AS responsable
FROM actividades AS a
LEFT JOIN socios_actividades AS sa ON sa.id_actividad = a.id_actividad
LEFT JOIN socios AS s ON sa.id_socio = s.id_socio
ORDER BY a.id_actividad;
+--------------+------------------+-------------+
| id_actividad | nombre_actividad | responsable |
+--------------+------------------+-------------+
| 1 | actividad 1 | socio 3 |
| 2 | actividad 2 | NULL |
| 3 | actividad 3 | socio 2 |
+--------------+------------------+-------------+
Observa que aquí al actividad 2 no tiene asignada ningún responsable, por esa razón debes utilizar LEFT o RIGTH JOIN...
Dale un vistazo para ver si esto es más o menos lo que querías preguntar.
Saludos
Leo.