2017-02-15 3 views
3

ich zwei Tabellen, Kunden und BestellungenSQL Abfragen in mehreren Tabellen

Kunden Spalten

CustomerID, 
Username, 
Password, 
Firstname, 
Surname, 
Email, 
Mobile 

Orders Spalten sind

OrderID, 
CustomerID, 
Date, 
Time, 
Price, 
Complete 

sind Ich möchte alle der Vorname und Nachname wählen von allen Bestellungen, die abgeschlossen wurden. Und ja, es könnte so sein, dass [0] = John Smith und [1] auch = John Smith.

Was ich dachte, war

SELECT FirstName, Surname from order, customers 
WHERE Complete = 'Yes' AND order.CustomerID = customer.CustomerID; 

Also zuerst sieht es an, wenn der Auftrag abgeschlossen ist. Wenn es dann ist, wird es die Kunden-ID ansehen, dann wird es zu den Kunden gehen und den Vor- und Nachnamen des Kunden erhalten, und dann in der Datentabelle speichern.

Vielen Dank für jede Hilfe !!!

+0

Tipp: Datum und Uhrzeit als einzelne Entität speichern – Strawberry

Antwort

2

Sie könnten verwenden existiert, wird die folgende Abfrage alle Kunden zurück, die nicht unvollständig haben (= 0) Aufträge:

select c.firstname, c.lastname 
from customers c 
where 
    not exists (select * from orders o 
       where c.customerid = o.orderid 
        and o.complete = 'No') 

aber es wird auch Kunden zurück, die keine Aufträge haben. Wenn Sie Kunden ohne Aufträge ausschließen möchten können Sie eine zusätzliche exist-Klausel verwenden:

select c.firstname, c.lastname 
from customers c 
where 
    not exists (select * from orders o 
       where c.customerid = o.orderid 
        and o.complete = 'No') 
    and exists (select * from orders o where c.customerid = o.orderid) 

oder eine Gruppe von Klausel:

select c.firstname, c.lastname 
from customers c inner join orders o on c.customerid = o.customerid 
group by c.customerid, c.firstname, c.lastname 
having sum(o.complete='No') = 0 
+0

Gruppieren nach würde nicht funktionieren, da OP Duplikate benötigt, wenn mehrere Aufträge denselben Kunden haben. – Andrew

0

Dies wird Ihnen Liste der Vorname, Nachname, auch wenn sie don keine Befehle haben.

SELECT Customers.Firstname, Customer.Surname 
FROM Customers, Orders 
WHERE Orders.Complete = 'Yes' 
LEFT JOIN Customers.CustomerID = Orders.CustomerID 
+3

Wer hat dieses Zeug hochgeladen? Sie können nicht einfach eine Syntax erstellen. – Strawberry

0

würde ich mit diesem persönlich gehen:

SELECT c.Firstname, c.Surname FROM Customers c 
INNER JOIN Orders o 
ON c.CustomerID=o.CustomerID 
WHERE o.Complete='Yes' 

Ich mag mit meiner Abfragen so explizit wie möglich sein, also alle anderen, die meinen Code hat zu lesen versteht, das, was, warum und wie . Sollten Sie nicht auch etwas auswählen, um die Bestellung zu identifizieren? Ansonsten haben Sie nur eine Liste mit Namen. Entfernen

0
--Unique list of customer id, customer first name and customer surname. 
SELECT DISTINCT 
    customers.customerid 
    , customers.firstname 
    , customers.surname 
FROM  orders 
INNER JOIN customers 
ON 
    customers.customerid = orders.customerid 
    AND orders.complete = 'Yes' 

--Unique list of customer first name and customer surname, regardless 
--if same names are tied to different customerid. 
SELECT DISTINCT 
    customers.customerid 
    , customers.firstname 
    , customers.surname 
FROM  orders 
INNER JOIN customers 
ON 
    customers.customerid = orders.customerid 
    AND orders.complete = 'Yes' 

DISTINCT Wort, wenn Sie Duplikate wollen.