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

Consulta dentro de otra

Estas en el tema de Consulta dentro de otra en el foro de Mysql en Foros del Web. Hola: Como puedo hacer una consulta que busque un registro en una tabla, lea el autoincrement de esa tabla(1) y busque ese nro en otra ...
  #1 (permalink)  
Antiguo 20/06/2018, 17:04
 
Fecha de Ingreso: noviembre-2003
Mensajes: 499
Antigüedad: 21 años
Puntos: 7
Consulta dentro de otra

Hola: Como puedo hacer una consulta que busque un registro en una tabla, lea el autoincrement de esa tabla(1) y busque ese nro en otra tabla(2), y si en 2 ese nro no esta que genere un registro nuevo con el valor ???.
No me doy la mas simple idea, me ayudan??
  #2 (permalink)  
Antiguo 20/06/2018, 17:33
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Consulta dentro de otra

con subconsultas


select * from tabla2
inner join (select * from tabla1 where id=registro)


Algo asi, solo que explicate mejor que quieres(pon cuales son los campos que relacionan a ambas tablas)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 17/07/2018, 14:01
 
Fecha de Ingreso: noviembre-2014
Ubicación: peru-lima
Mensajes: 32
Antigüedad: 10 años
Puntos: 2
Respuesta: Consulta dentro de otra

Código SQL:
Ver original
  1. DROP DATABASE bd;
  2. CREATE DATABASE bd;
  3. USE bd;
  4.  
  5. CREATE TABLE tabla1(
  6. id INT PRIMARY KEY AUTO_INCREMENT
  7. );
  8. CREATE TABLE tabla2(
  9. idTabla1 INT
  10. );
  11.  
  12. INSERT INTO tabla1 VALUES
  13. (DEFAULT),(DEFAULT),(DEFAULT),(DEFAULT),(DEFAULT),(DEFAULT);
  14.  
  15. INSERT INTO tabla2(idTabla1)VALUES
  16. (1),(3),(6);
  17.  
  18. SELECT * FROM tabla1;
  19. SELECT * FROM tabla2;
  20.  
  21. delimiter |
  22.  CREATE PROCEDURE buscaEnDosYsiNoHayInserta()
  23.  BEGIN
  24.  DECLARE done BOOLEAN DEFAULT FALSE;
  25. DECLARE a INT;
  26.  
  27. -- lee el id de la tabla1 y guarda los valores en c1
  28.  DECLARE c1 CURSOR FOR
  29.        SELECT id
  30.          FROM tabla1;
  31.        
  32.        
  33.       DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE;
  34.      OPEN c1;
  35.         c1_loop: LOOP
  36.         -- fetch c1 into a dice-> a = id)
  37.             fetch c1 INTO a;
  38.          IF done THEN LEAVE c1_loop; END IF;
  39.          -- "busque ese nro en otra tabla(2)"
  40.          -- ese nro = a
  41.          -- "y si en 2 ese nro no esta que genere un registro nuevo con el valor"
  42.    IF(NOT EXISTS(SELECT * FROM tabla2 WHERE idTabla1 = a))THEN
  43.    INSERT INTO tabla2 VALUES (a);
  44.    END IF;
  45.         END LOOP c1_loop;
  46.     CLOSE c1;
  47.  
  48.  END
  49.  |
  50.  
  51.  CALL buscaEnDosYsiNoHayInserta();
  52.  
  53.  
  54. -- --------------------- otros
  55. delimiter |
  56. CREATE PROCEDURE dowhile()
  57. BEGIN
  58.   -- DECLARE v1 INT DEFAULT 5;
  59.     DECLARE v1 INT DEFAULT 1;
  60.     DECLARE v2 INT;
  61.     SET v2  = (SELECT COUNT(*) FROM tabla1);
  62.   WHILE v2 >= v1 DO
  63.     IF(NOT EXISTS(SELECT * FROM tabla2 WHERE idTabla1 = v1))THEN
  64.    INSERT INTO tabla2 VALUES (v1);
  65.    END IF;
  66.     SET v1 = v1 + 1;
  67.   END WHILE;
  68. END;
  69. |
  70.  
  71. delimiter |
  72. CREATE PROCEDURE doiterate()
  73. BEGIN
  74. DECLARE p1 INT DEFAULT 0;
  75. DECLARE v2 INT;
  76.     SET v2  = (SELECT COUNT(*) FROM tabla1);
  77.   label1: LOOP
  78.     SET p1 = p1 + 1;
  79.     IF v2 >= p1 THEN
  80.     IF(NOT EXISTS(SELECT * FROM tabla2 WHERE idTabla1 = p1))THEN
  81.    INSERT INTO tabla2 VALUES (p1);
  82.    END IF;
  83.       ITERATE label1;
  84.     END IF;
  85.     LEAVE label1;
  86.   END LOOP label1;
  87.  -- SET @x = p1;
  88. END;
  89. |
  90.  
  91.  
  92. CALL dowhile();
  93. CALL doiterate();

Última edición por gnzsoloyo; 17/07/2018 a las 17:26

Etiquetas: registro
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:28.