Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Devolver un solo registro

Estas en el tema de Devolver un solo registro en el foro de SQL Server en Foros del Web. Buenos días, tengo un problema, normalmente tengo una tabla de datos únicos a los cuales debo añadirles informacion de otra tabla, esto lo hago con ...
  #1 (permalink)  
Antiguo 06/12/2017, 09:45
 
Fecha de Ingreso: enero-2010
Mensajes: 75
Antigüedad: 7 años, 11 meses
Puntos: 1
Exclamación Devolver un solo registro

Buenos días, tengo un problema, normalmente tengo una tabla de datos únicos a los cuales debo añadirles informacion de otra tabla, esto lo hago con inner join lo cual si el registro tiene varios resultados me los da, pero que pasa si solo quiero que me devuelva un solo resultado especifico?

Ejm.:



Lo que busco es llenar el campo DNI de la tabla 2 con los datos de la tabla 1.

Cual seria el mejor modo de hacerlo.

Tal vez con UPDATE pero cual seria la consulta correcta?

Nota: Tabla 1 = +21millones resgistros ; Tabla 2 = +300K registros "PC no muy potente T_T"

Última edición por collider; 06/12/2017 a las 09:53
  #2 (permalink)  
Antiguo 06/12/2017, 10:10
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.124
Antigüedad: 11 años, 3 meses
Puntos: 729
Respuesta: Devolver un solo regitrso

Algo como eso :)

Código SQL:
Ver original
  1. UPDATE nueva
  2. SET dni=t1.dni
  3. FROM
  4. (SELECT nombre, dni FROM nombres GROUP BY nombre, dni
  5. ) AS t1 WHERE nueva.nombre=t1.nombre
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 06/12/2017, 14:01
 
Fecha de Ingreso: enero-2010
Mensajes: 75
Antigüedad: 7 años, 11 meses
Puntos: 1
Respuesta: Devolver un solo regitrso

Mil disculpas por haberme hecho entender mal ya que al parecer la consulta que me indica Libras es para crear una nueva tabla con un único registro por Nombre.

EJM.:

TABLA1:

USER ; DNI
jose ; 123
jose ; 123
jose ; 123
jose ; 123
jose ; 123
juan ; 321
juan ; 321
juan ; 321
juan ; 321

TABLA2:

USER ; DNI
jose ;
jose ;
juan ;

El resultado que busco es:

USER ; DNI ; USER ; DNI
jose ; ; jose ; 123
jose ; ; jose ; 123
juan ; ; juan ; 321

pensé que con LEFT JOIN lograría hacerlo, pero los resultados son mas de los esperados.

hice la siguiente consulta : SELECT * FROM tabla2 LEFT JOIN tabla1 ON tabla2.user = tabla1.user

Según el ejemplo y según yo con el left join solo me debió devolver 4 Filas de resultados.

Como podría lograr el resultado esperado?

Me vuelvo a disculpar por no haberme sabido explicar bien.
  #4 (permalink)  
Antiguo 06/12/2017, 14:45
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.124
Antigüedad: 11 años, 3 meses
Puntos: 729
Respuesta: Devolver un solo regitrso

Simplemente aplicamos la misma logica:

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. nombre nvarchar(20),
  4. dni INT
  5. )
  6.  
  7. CREATE TABLE #temp2
  8. (
  9. nombre nvarchar(20),
  10. dni INT
  11. )
  12.  
  13.  
  14. INSERT INTO #temp VALUES ('jose' , 123)
  15. INSERT INTO #temp VALUES ('jose' , 123)
  16. INSERT INTO #temp VALUES ('jose' , 123)
  17. INSERT INTO #temp VALUES ('jose', 123)
  18. INSERT INTO #temp VALUES ('jose' , 123)
  19. INSERT INTO #temp VALUES ('juan' , 321)
  20. INSERT INTO #temp VALUES ('juan' , 321 )
  21. INSERT INTO #temp VALUES ('juan' , 321)
  22. INSERT INTO #temp VALUES ('juan' , 321)
  23.  
  24.  
  25. INSERT INTO #temp2 (nombre) VALUES ('jose')  
  26. INSERT INTO #temp2 (nombre) VALUES  ('jose')
  27. INSERT INTO #temp2 (nombre) VALUES ('jose')
  28. INSERT INTO #temp2 (nombre) VALUES ('juan')
  29.  
  30.  
  31.  
  32. SELECT t2.*, t1.* FROM(
  33. SELECT nombre, dni FROM #temp GROUP BY nombre,dni
  34. ) AS t1
  35. LEFT JOIN #temp2 AS t2 ON (t1.nombre=t2.nombre)

Con esto nos regresa la informacion como la necesitas en este caso:

nombre dni nombre dni
jose NULL jose 123
jose NULL jose 123
jose NULL jose 123
juan NULL juan 321
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 07/12/2017, 14:17
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.124
Antigüedad: 11 años, 3 meses
Puntos: 729
Respuesta: Devolver un solo registro

y funciono o no?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me



La zona horaria es GMT -6. Ahora son las 15:19.