2017-06-29 2 views
0

Ich habe 3 Tabellen in meiner Datenbank.So erhalten Sie Informationen aus der Datenbank mit Ausnahme einiger Daten

Die erste Tabelle ist "Ordenes", in dieser Tabelle habe ich alle Bestellungen, die die Benutzer auf der Website erstellen, diese Tabelle hat Informationen wie: FechaFinal, FechaInicial, NoOrden, Cantidad und Estado.

Ich habe eine andere Tabelle namens "Kabel", in dieser Tabelle speichere ich alle Kabel, die die Benutzer pro Bestellung registrieren.

Zum Beispiel, wenn ich eine Bestellzeile habe und die Cantidad sagt, dass 200 ist, so muss der Benutzer 200 Kabel zu dieser Bestellung registrieren.

Die Kabeltabelle enthält Informationen wie: Serial, IdOrden und IdOperation. Die IdOperation ist ein Fremdschlüssel der Operationstabellen, in dieser Tabelle speichere ich Informationen wie: Name der Operation und alles.

Deshalb möchte ich eine SQL-Abfrage tun, die mir diese Informationen zeigen:

FechaInicial (Von Auftragstabelle), Fechafinal (Von Auftragstabelle), Noorden (Von Auftragstabelle), Werkstoff (Von Auftragstabelle), Cantidad (Von Bestellungstabelle), und ausgeführt (Dies ist eine Zählung aller Kabel, die ich in meiner Kabeltabelle für eine Bestellung habe)

Ich habe es, und es funktioniert, aber ich möchte, dass die Abfrage NUR die Kabel COUNT das heißt nicht in einer Operation namens 'Scrap'.

Ich habe diese SQL-Abfrage, und es funktioniert, aber es zählt auch die Kabel, die in der 'Scrap' Operation sind.

SELECT o.FechaInicial, o.FechaFinal, o.NoOrden, o.Material, o.Cantidad, COUNT(c.IdCable) as 'Hechos', o.Estado 
FROM Ordenes o 
LEFT JOIN Cables c ON o.IdOrden = c.IdOrden 
LEFT JOIN Operaciones op ON c.IdOperacion = op.IdOperacion AND op.Nombre NOT IN ('Scrap') 
GROUP BY o.FechaInicial, o.Fechafinal, o.NoOrden, o.Material, o.Cantidad, o.Estado; 

Ich möchte alle Bestellungen anzeigen, auch wenn eine Bestellung noch keine Kabel hat.

Antwort

1

Ändern Sie die Anzahl auf COUNT(op.Nombre) oder COUNT(op.idOperacion), wenn Nombre NULL sein kann.

0

Die left join behält alle Zeilen, auch diejenigen, die scrap haben. Die beste Lösung besteht darin, den Primärschlüssel oder den Join-Schlüssel aus der letzten Tabelle zu zählen. Also, ich würde empfehlen:

SELECT o.FechaInicial, o.FechaFinal, o.NoOrden, o.Material, o.Cantidad, 
     COUNT(op.IdOperacion) as Hecho, o.Estado 
FROM Ordenes o LEFT JOIN 
    Cables c 
    ON o.IdOrden = c.IdOrden LEFT JOIN 
    Operaciones op 
    ON c.IdOperacion = op.IdOperacion AND op.Nombre NOT IN ('Scrap') 
GROUP BY o.FechaInicial, o.Fechafinal, o.NoOrden, o.Material, o.Cantidad, o.Estado; 

Dies gilt nur "matching" Zeilen in Operaciones.

Hinweis: Wenn Sie eine Datenspalte zählen, fehlen möglicherweise Zeilen mit dem Wert NULL in der ursprünglichen Tabelle. Das könnte eine gute Sache sein, abhängig von der Absicht der Abfrage. Im Allgemeinen ist es sicherer, etwas zu zählen, das nicht NULL sein kann, wenn eine Übereinstimmung auftritt.

Verwandte Themen