2017-04-04 1 views
0

Ich habe zwei Tabellen: und payments.Auswahl von Studenten, die in einem bestimmten Zeitraum (Laufzeit) keine Zahlung geleistet haben

students hat die Spalten:

first_name 
last_name 
student_id 
class_name 

payments Tabelle enthält die Spalten:

full_name 
student_id 
term 
session 
amount_paid 
class_fee 

Die Details eines jeden Schülers ist in der students Tabelle, sondern nur diejenigen, die gemacht haben, entweder vollständig oder teil Die Zahlung wird in die Tabelle payments eingegeben. Ich habe eine Abfrage geschrieben, um diejenigen auszuwählen, die bezahlt haben.

Die Frage ist jetzt, wie man eine Abfrage schreibt, die jene in einer bestimmten Klasse auswählt, die überhaupt keine Zahlung in einem gegebenen Zeitraum (Ausdruck) geleistet haben.

+0

SELECT p. *, S. * VON Zahlungen p LEFT JOIN Studenten ON s.student_id = p.student_id wo p.amount_paid <= 0 und p.term = 'yourcondition'“ –

Antwort

1

Sie verwenden wahrscheinlich eine JOIN, um diejenigen auszuwählen, die bezahlt haben. Das wird funktionieren, da in beiden Tabellen übereinstimmende Zeilen vorhanden sind. Um diejenigen zu finden, die nicht bezahlt haben, können Sie eine LEFT JOIN verwenden. Es wird Ihnen NULL geben, wenn die Zeilen nicht übereinstimmen.

SELECT students.* 
FROM students 
LEFT JOIN payments ON students.student_id = payments.student_id 
    AND term = 'whatever' 
WHERE amount_paid IS NULL 

(Anmerkung: Die term = 'whatever' Bedürfnisse in der ON Klausel sein, nicht die WHERE)

Sie können dies auch eine Unterabfrage tun und die NOT EXISTS Klausel. NOT EXISTS gibt true zurück, wenn die Unterabfrage null Zeilen zurückgibt.

SELECT * 
FROM students 
WHERE NOT EXISTS(
    SELECT amount_paid 
    FROM payments 
    WHERE students.student_id = payments.student_id 
     AND term = 'whatever' 
) 
+0

Thank Sie sehr viel Rocket für Ihre schnelle Antwort, aber was ist mit der Klasse des Studenten? Ich möchte eine bestimmte Klasse abfragen, sagen class1. Sollte ich am Ende hinzufügen, AND class = '$ class1'? – OponjousJoe

+0

@OponjousJoe: 'Klasse' Ist das ein Teil des Studententisches, ja? Wenn ja, dann sollte das funktionieren. –

+0

Ich weiß es zu schätzen, aber ich möchte eine Klasse abfragen sagen Klasse1, innerhalb einer Sitzung sage 2016/2017 und in einem Begriff sage first_term jede weitere Hilfe bitte – OponjousJoe

Verwandte Themen