Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL-Abfrage zum bedingten Abrufen von Datensätzen basierend auf einer Schlüsselwertliste

Die Herausforderung hierbei besteht darin, dass Sie diese von einer API-Antwort abgerufenen Werte als Eingabe an Ihre SQL-Anweisung übergeben und eine Ausgabe generieren müssen, indem Sie dynamisch eine Anzahl von Vergleichen basierend auf der Eingabe erstellen.

Nun, wenn ich mit Ihrer Back-End-Plattform vertraut gewesen wäre, hätte ich eine passendere Lösung gegeben, aber da ich Node.js nicht kenne, enthält meine Lösung nur die erforderlichen SQL-Anweisungen und den verbleibenden Teil, den Sie benötigen DIY.

Als erstes müssen Sie diese API-Antwort parsen und diese Werte in einer Datenstruktur speichern.

Erstellen Sie nun eine Temporary table in von Ihrer Node.js Code und speichern Sie diese Eingabewerte in dieser Tabelle.

  CREATE TEMPORARY TABLE Input (id INT, value INT);

Fügen Sie dieser Tabelle Daten aus dieser Datenstruktur hinzu.

Führen Sie nun die folgende Abfrage aus und Sie erhalten, was Sie wollen:

SELECT skp.quest_id
FROM SKILL_PREREQUISITES skp 
GROUP BY quest_id
HAVING COUNT(skp.quest_id) =
                     ( SELECT COUNT(quest_id)
                       FROM Input i
                       JOIN SKILL_PREREQUISITES sp
                       ON sp.prerequisite_skill_id = i.id
                       AND sp.skill_value <= i.value
                       WHERE skp.quest_id = sp.quest_id
                      )

Demo Fiddle