Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

377
Vistas
¿Cómo crear una consulta sql para un sistema de etiquetas con varias etiquetas?

Tengo 3 tablas y no sé cómo crear una serie de consultas sql (o si es posible solo una consulta compleja). Las tablas son:

 CREATE TABLE IF NOT EXISTS excerpt( excerptID INT UNSIGNED NOT NULL AUTO_INCREMENT, author VARCHAR(45) NOT NULL, title VARCHAR(255) NOT NULL, text VARCHAR(1000) NOT NULL, comments VARCHAR(1000) NOT NULL, PRIMARY KEY (excerptID) ) ENGINE=INNODB CHARACTER SET utf8mb4; CREATE TABLE IF NOT EXISTS tag( tagID INT UNSIGNED NOT NULL AUTO_INCREMENT, description VARCHAR(45) NOT NULL , PRIMARY KEY (tagID) ) ENGINE=INNODB CHARACTER SET utf8mb4; CREATE TABLE IF NOT EXISTS tagmap ( excerptID INT UNSIGNED NOT NULL, tagID INT UNSIGNED NOT NULL, PRIMARY KEY (excerptID, tagID), CONSTRAINT excerptFK FOREIGN KEY (excerptID) REFERENCES excerpt (excerptID) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT tagFK FOREIGN KEY (tagID) REFERENCES tag (tagID) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=INNODB;

Según el parámetro de descripción, debo devolver todas las descripciones de etiquetas relacionadas con todos los extractos vinculados a esa descripción. Entonces, por ejemplo, si tengo cuatro extractos

 Excerpt(1, aaaa , aaaa, aaaa, aaaa) bound via tagmap to tags (A, B, C) Excerpt(2, bbbb, bbbb, bbbb, bbbb) bound via tagmap tags (A, D) Excerpt(3, cccc, cccc, cccc, cccc) bound via tagmap to tag (B) Excerpt(4, dddd, ddddd, dddd, dddd) bound via tagmap to tags (B, D)

y mi parámetro es "B", quiero devolver una lista de extractos y descripciones:

 [Tag [excerptID=1, description=A], Tag [excerptID=1, description=B], Tag [excerptID=1, description=C], Tag [excerptID=3, description=B], Tag [excerptID=4, description=B], Tag [excerptID=4, description=D]]

Hasta ahora tengo esto

 String SQL = "SELECT e.excerptID, t.description from Excerpt AS e LEFT JOIN tagmap AS m ON m.excerptID = e.excerptID LEFT JOIN tag AS t ON t.tagID = m.tagID WHERE t.description = ?";

pero eso solo devolverá esto

 [Tag [excerptID=1, description=B], Tag [excerptID=3, description=B], Tag [excerptID=4, description=B]]

y no puedo averiguar cómo proceder más.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Según el parámetro de descripción, debo devolver todas las descripciones de etiquetas relacionadas con todos los extractos vinculados a esa descripción. Entonces, por ejemplo, si tengo cuatro extractos

Creo que esto hace lo que quieres:

 select t.* from tags t where exists (select 1 from tagmap tm1 join tagmap tm2 on tm1.excerptid = tm2.excerptid join tags t2 on tm2.tagid = t.tagid where tm1.tagid = t.tagid and t2.description = ? );

Esto parece complicado, tal vez porque lo es. Pero la subconsulta básicamente obtiene todos los pares de etiquetas adjuntas a la misma entidad. Una etiqueta (la de tm2 ) está vinculada a la descripción que le interesa. Ese es el t2.description = ? en la cláusula where .

El otro está atado a la etiqueta en la mesa exterior. Esa es la cláusula de correlación tm1.tagid = t.tagid .

Otra forma de expresarlo es que esta consulta (básicamente la subconsulta):

 select distinct tm1.tagid from tagmap tm1 join tagmap tm2 on tm1.excerptid = tm2.excerptid join tags t2 on tm2.tagid = t.tagid where t2.description = ?

devuelve todas las etiquetas que están en una entidad que también tiene la etiqueta que está buscando.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda