2017-04-17 3 views
0

Okay, so habe ich zwei Tabellen:MYSQL, eine Ansicht erstellen und ziehen Informationen aus zwei Tabellen

hscust und hssales_rep

Ich brauche eine Ansicht zu erstellen, die mir die Wiederholungen fname und lname zeigt (sowie die Kunden) und zeigen, wie viel der Kunde auf seinem Guthaben liegt.

Dies ist der Code, den ich habe:

CREATE VIEW OverLimit AS 
SELECT 
    CONCAT(hssales_rep.last,hssales_rep.first) AS Rep,  
    CONCAT(hscust.last,hscust.first) AS Cust, 
    SUM(credit_limit - balance) 
FROM hscust 
INNER JOIN hssales_rep ON hscust.sales_rep = hssales_rep.repid 

Und es gibt ein leeres Ergebnis.

Jede Hilfe wird sehr geschätzt!

salesrep table cust table

+0

Alle Beispieldaten, die Sie teilen können? –

+0

Ich habe die Tabellen, an denen ich arbeite, zur Frage –

+0

hinzugefügt. Ihre Aussage scheint zu funktionieren.Sie müssen die Beispieldaten wirklich in einer ** create table **, gefolgt von ** insert ** statements, nicht in einem Bildformat bereitstellen, damit wir das Problem reproduzieren können. –

Antwort

0

A CREATE VIEW Anweisung gibt keinen resultset.

Eine SELECT-Anweisung kann eine leere Ergebnismenge zurückgeben. Aber wir erwarten, dass die SELECT-Anweisung in Ihrer Sichtdefinition entweder eine einzelne Zeile zurückgibt oder einen Fehler auslöst.

Ich schlage vor, dass Sie ein wenig brechen.

1) Welches Problem wird durch die CREATE VIEW Anweisung gelöst. Warum brauchst du eine Aussicht?

2) Bevor Sie eine CREATE VIEW Anweisung schreiben, zuerst entwickeln und testen eine SELECT Anweisung, die die erforderliche resultset zurückgibt. Tun Sie das vor Sie setzen das in eine Sichtdefinition.

Ich empfehle auch dringend, dass Sie alle Spaltenreferenzen in der SELECT-Anweisung entweder mit dem Tabellennamen oder (vorzugsweise) einem kurzen Tabellenalias qualifizieren.

Wenn Sie eine Zeile für jeden Cust mit einer Aggregatfunktion (z SUM) in der SELECT-Liste zurückkehren mögen, dann eine entsprechende GROUP BY Klausel zu Ihrer SELECT Anweisung hinzufügen.

Es ist nicht klar, warum wir eine SUM-Aggregatfunktion verwenden möchten.

Der Unterschied zwischen "credit_limit" und "balance" wäre das verfügbare (verbleibende) Guthaben. Ein negativer Wert würde anzeigen, dass der Saldo das Kreditlimit überschritten hat.

Wenn wir nur Zeilen für Kunden zurückgeben möchten, die ihr Kreditlimit überschritten haben, können wir eine WHERE-Klausel hinzufügen.

SELECT CONCAT(r.last,r.first)  AS Rep 
    , CONCAT(c.last,c.first)  AS Cust 
    , c.credit_limit - c.balance AS available_credit 
    FROM hscust c 
    JOIN hssales_rep r 
    ON c.sales_rep=r.repid 
WHERE c.credit_limit - c.balance < 0 
ORDER 
    BY CONCAT(r.last,r.first) 
    , CONCAT(c.last,c.first) 
    , c.custid 

Auch hier erhalten eine SELECT Anweisung arbeiten (die erforderliche resultset Rückkehr) vor Sie es in einer CREATE VIEW wickeln.

+0

Ohhh ich sehe! Ich verstehe es jetzt, vielen Dank! –

Verwandte Themen