2011-02-15 13 views
14

Tengo una tabla llamada maintable con 3 columnas: id, userid1 y userid2.¿Cómo seleccionar dos columnas adicionales de otra tabla basadas en valores en la tabla principal?

Otra tabla llamada users está introducido por userid, y tiene name como una columna.

deseo seleccionar algo en la línea de:

SELECT maintable.*, users.name AS username1, users.name AS username2 
FROM maintable, users 
WHERE ... 

Básicamente quiero conseguir todas las columnas de la fila maintable, y añadir dos columnas en el extremo que atraerá a los nombres de userid1 y userid2 de la tabla users.

No estoy seguro de cómo formatear la cláusula where para una consulta como esta.

Respuesta

16

tienes que estar inscrito dos veces con los usuarios:

SELECT m.*, u1.name, u2.name 
FROM maintable m 
INNER JOIN users u1 ON (m.userid1 = u1.userid) 
INNER JOIN users u2 ON (m.userid2 = u2.userid) 

Puede leer la documentación sobre MySQL sintaxis de unión here.

+0

¿Qué pasa si la tabla de usuarios tiene sólo una entrada para un usuario particular? Creo que unirse a la izquierda sería preferible. – Chandu

+0

@Cybernate: si ese es el caso ('userid1' o' userid2' podría no existir en la tabla 'users') estoy de acuerdo con usted. De lo contrario, preferiría una ** unión interna **. –

+0

No creo que haya dos columnas con el nombre userid1 y userid2 en la tabla. Es solo una columna por nombre userid. – Chandu

4

algo como esto,

select m.*, 
(select u1.name from users as u1 where m.userid1 = u1.userid) as username1, 
(select u2.name from users as u2 where m.userid2 = u2.userid) as username2 
from 
maintable as m 
+0

No olvide alias las tablas de usuarios en las subconsultas. – ryebr3ad

+0

ya ... me acabo de enterar. gracias por marcar – Paulraj

+0

¿Hay una tabla con el nombre 'maintable' o es una tabla personalizada? –

Cuestiones relacionadas