2017-12-21 9 views
0

Ich habe ein SQL-Skript, das Zuweisungen auswählt, die ein Student zugewiesen wurde. Um herauszufinden, ob der Schüler seine Aufgabe abgeschlossen hat, verwende ich eine Unterabfrage. Sobald der Schüler eine Aufgabe beendet hat, sollte er in der Lage sein, an der nächsten zu arbeiten.SQL - Wie verhindert man die Verbindung von drei Abfragen in eine

Ich denke, ich kann dies tun, indem Sie die oberste 1 Zuweisung, die nicht abgeschlossen wurde (0 Wert) ausgewählt. Was ich mit einer zusätzlichen Abfrage der ersten Abfrage tun kann, aber dann würde ich eine dritte Abfrage benötigen, um diese Abfrage zusammenzufügen. Gibt es eine Möglichkeit, diese Auswahl der Top 1-Zuweisung, die einen Wert von 0 hat, mit 2 Abfragen oder weniger zu erreichen?

ersten Versuch

SELECT ag.group_id, 
    ag.title, 
    ac.collection_id, 
    ag.order, 
    ac.NAME, 
    ac.isactive, 
    (SELECT top 1 iscompleted 
     FROM student_completion 
     WHERE fk_collection_id = collection_id 
     AND fk_student_id like '404') 
     AS isCompleted, 
FROM assignments AS ag 
    JOIN assignments_collection AS ac 
    ON ag.fk_collection_id = ac.collection_id 
Order BY group_id 

/* 
SELECT TOP 1 isCompleted 
(SELECT ag.group_id, 
    ag.title, 
    ac.collection_id, 
    ag.order, 
    ac.NAME, 
    ac.isactive, 
    (SELECT top 1 iscompleted 
     FROM student_completion 
     WHERE fk_collection_id = collection_id 
      AND fk_student_id like '404') 
    AS isCompleted, 
FROM assignments AS ag 
    JOIN assignments_collection AS ac 
     ON ag.fk_collection_id = ac.collection_id 
Order BY group_id) 
Where isCompleted = 0 

......... 
*/ 

Daten

+----------+--------------+---------------+-------+----------------------+----------+-------------+ 
| group_id | title  | collection_id | order |   name   | isactive | isCompleted | 
+----------+--------------+---------------+-------+----------------------+----------+-------------+ 
|  1 | Assingment_1 |    5 |  0 | Welcome to Linux  |  1 |   0 | 
|  2 | Assingment_2 |    6 |  0 | Installation   |  1 |   0 | 
|  3 | Assingment_3 |    9 |  1 | Intro to Bash  |  1 |   0 | 
|  3 | Assingment_4 |    3 |  1 | Intro to Bash part 2 |  1 |   0 | 
+----------+--------------+---------------+-------+----------------------+----------+-------------+ 

Daten erwartet

+----------+--------------+---------------+-------+----------------------+----------+-------------+-----------+ 
| group_id | title  | collection_id | order |   name   | isactive | isCompleted | available | 
+----------+--------------+---------------+-------+----------------------+----------+-------------+-----------+ 
|  1 | Assingment_1 |    5 |  0 | Welcome to Linux  |  1 |   0 |   1 | 
|  2 | Assingment_2 |    6 |  0 | Installation   |  1 |   0 |   0 | 
|  3 | Assingment_3 |    9 |  1 | Intro to Bash  |  1 |   0 |   0 | 
|  3 | Assingment_4 |    3 |  1 | Intro to Bash part 2 |  1 |   0 |   0 | 
+----------+--------------+---------------+-------+----------------------+----------+-------------+-----------+ 

student_completion

+---------------+------------------+-------------+ 
| FK_studentKey | FK_collectionKey | isCompleted | 
+---------------+------------------+-------------+ 
|   404 |    5 |   1 | 
+---------------+------------------+-------------+ 
+0

Aus welcher Tabelle stammen Ihre Beispieldaten? Wie ist die Struktur Ihrer anderen zwei Tabellen? Haben Sie auch Beispieldaten für sie? Die erwartete Ausgabe wäre ebenfalls hilfreich. –

+0

Hier ist ein großartiger Ort, um zu beginnen. http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

+0

Es sieht aus wie Sie die gewünschte Ausgabe gepostet? Sie müssen die Details der Tabellen angeben, wenn Sie Hilfe benötigen. Und seien Sie nicht überrascht, wenn wir Ihnen keine Antwort geben, da dies viele Hausaufgaben sieht. –

Antwort

0

Ihre Frage ist extrem erklärungsarm. Ich mache hier eine Aufnahme im Dunkeln. Macht das was du willst?

select d.* 
    , available = sc.isCompleted 
from Data d 
left join student_completion sc on sc.FK_colletionKey = d.collection_id 
Verwandte Themen