Lo primero que haría es recomendar usar un ORM como Linq-To-Sql o NHibernate lo que le brindará representaciones de objetos de su modelo de datos que simplifican mucho el manejo de cosas complejas como operaciones CRUD de muchos a muchos.
Si un ORM no es parte de su conjunto de herramientas, así es como se vería en SOL.
Users UserAddresses Addresses ======= ============= ========= Id Id Id FirstName UserId City LastName AddressId State Zip
Nuestras tablas se unen así:
Users.Id -> UserAddresses.UserId Addresses.Id -> UserAddresses.AddressId
- Todos los registros en Usuarios basados en Direcciones.Id
SELECT Users.* FROM Addresses INNER JOIN UserAddresses ON Addresses.Id = UserAddresses.AddressId INNER JOIN Users ON UserAddresses.UserId = Users.Id WHERE (Addresses.Id = @AddressId)
- Todos los registros en Direcciones basados en Users.Id
SELECT Addresses.* FROM Addresses INNER JOIN UserAddresses ON Addresses.Id = UserAddresses.AddressId INNER JOIN Users ON UserAddresses.UserId = Users.Id WHERE (Users.Id = @UserId)