Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

381
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!