2012-04-19 28 views
5

Tengo 2 tablas: usuarios & balance.MySQL - Unir 2 tablas

Quiero unir las tablas con todos los detalles de la tabla de usuarios (todos los campos de todas las tuplas) con la entrada más reciente de la tabla de saldo (1 campo vinculado por una identificación de usuario).

Aquí está la estructura de las tablas:

equilibrio:

+---------+ 
| Field | 
+---------+ 
| dbid | 
| userId | 
| date | 
| balance | 
+---------+ 

usuarios:

+-------------+ 
| Field  | 
+-------------+ 
| dbid  | 
| id   | 
| fName  | 
| sName  | 
| schedName | 
| flexiLeave | 
| clockStatus | 
+-------------+ 

He estado tratando durante horas para hacer esto y lo más cerca que puedo conseguir es para devolver una fila para un solo usuario:

SELECT u.*, b.balance, b.date FROM users u, balance b WHERE u.id = b.userId AND b.date = (SELECT MAX(date) FROM balance WHERE userId = 'A8126982'); 

O puedo seleccionar todos los usuarios, pero no la más reciente entrada en la tabla de equilibrio:

SELECT u.*, b.balance, b.date FROM users u, balance b WHERE u.id = b.userId GROUP BY u.id; 

He intentado muchas consultas diferentes y parecen estar cada vez más cerca, pero simplemente no puede llegar a donde quiero ser.

Cualquier ayuda sería apreciada.

+0

¿Cuál es el resultado que obtienes en tu primera consulta? –

Respuesta

18

Puede utilizar la primera SQL que escribió sino para todos los usuarios:

SELECT u.*, b.balance, b.date 
FROM users u JOIN balance b ON u.id = b.userId 
WHERE b.date = (SELECT MAX(date) FROM balance WHERE userId = u.id); 

Esto puede no ser la manera más rápida para obtener el resultado, pero voy a dar lo que necesita. Utilizo consultas similares en bastantes lugares en mi aplicación.

+0

Gracias, esto está obteniendo los resultados que necesito. – SteveJDB