2017-06-29 97 views
0

我的數據庫中有3個表。如何從數據庫中獲取排除某些數據的信息

第一個表格是「Ordenes」,在這個表格中我有用戶在網站上創建的所有訂單,這張表格有如下信息:FechaFinal,FechaInicial,NoOrden,Cantidad和Estado。

我有另一張名爲「電纜」的表格,在這張表中我保存了用戶每個訂單註冊的所有電纜。

例如,如果我有一個訂單行,並且Cantidad表示這是200,那麼用戶需要爲此訂單註冊200根電纜。

Cables表具有以下信息:Serial,IdOrden和IdOperation。 IdOperation是操作表的外鍵,在這個表中,我保存瞭如下信息:操作名稱及其全部。

所以我想做一個SQL查詢,告訴我這個信息:

FechaInicial(從訂單表),Fechafinal(從訂單表),NoOrden(從訂單表),材料(從訂單表) (從訂單表),並執行(這是我的電纜表中有一些訂單所有電纜的計數)

我有它,它的工作原理,但我希望查詢只計算電纜這不是在一些稱爲'廢料'的操作。

我有這個SQL查詢,它的工作原理,但它也在計算'廢料'操作中的電纜。

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; 

我想顯示所有訂單,即使訂單沒有電纜。

回答

1

如果Nombre可以爲NULL,則將計數更改爲COUNT(op.Nombre)COUNT(op.idOperacion)

0

left join保留所有行,即使是那些有scrap。最好的解決方案是統計最後一個表中的主鍵或連接鍵。所以,我建議:

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; 

此計算中只Operaciones 「匹配」 行。

注意:如果您計算數據列,則可能會丟失原始表中該值爲NULL的行。這可能是一件好事,取決於查詢的意圖。一般來說,在匹配發生時計數不可能是NULL是比較安全的。

相關問題