我有兩張表,一張跟蹤產品的購買(由其 EAN 表示),另一張跟蹤產品的銷售。但并非所有售出的產品都在購買表中,反之亦然。例如:
購買
| 購買否 | EAN |
|---|---|
| 1 | 0001 |
| 2 | 0002 |
| 3 | 0003 |
| 4 | 0004 |
銷售
| 銷售編號 | EAN |
|---|---|
| 1 | 0002 |
| 2 | 0003 |
| 3 | 0004 |
| 4 | 0005 |
我還有一張表格,其中包含 EAN 編號的產品規格:
產品EAN
| EAN | 姓名 |
|---|---|
| 0001 | 產品1 |
| 0002 | 產品2 |
| 0003 | 產品3 |
| 0004 | 產品4 |
| 0005 | 產品5 |
我現在想創建一個視圖來告訴我我當前的庫存(即使庫存是負數)。我目前的方法是為每個購買和銷售創建一個視圖,其中“金額”列告訴我我購買或出售了多少產品。
所以對于我的購買將是:
CREATE VIEW `PurchaseAmount` AS
SELECT
`ProductEAN`.`EAN` AS `EAN`,
COUNT(`Purchase`.`EAN`) AS `Amount`
FROM (`ProductEAN` JOIN `Purchase`)
WHERE `ProductEAN`.`EAN` = `Purchase`.`EAN`
GROUP BY `ProductEAN`.`EAN`
相當于我的銷售額。
我現在想結合這兩個視圖來創建我的最終庫存視圖。問題是,據我所知和測驗,我只能在我的視圖中進行正常連接,這導致我的兩個“子”視圖不包含未購買或出售的 EAN。因此,我的最終庫存視圖只能顯示購買和銷售表中的 EAN。
有沒有辦法在 MySQL 視圖中進行左連接以保留所有 EAN,即使它們沒有在視圖參考的表中使用。
uj5u.com熱心網友回復:
您可以先COUNT分別計算過度購買和銷售,然后將 保留LEFT JOIN為最后的操作以提高查詢效率。
SELECT
ProductEAN.EAN AS EAN,
COALESCE(Purchases.num_purchases, 0) AS num_purchases,
COALESCE(Sales.num_sales, 0) AS num_sales
FROM
ProductEAN
LEFT JOIN
(
SELECT
EAN,
COUNT(EAN) AS num_purchases
FROM
Purchase
GROUP BY
EAN
) Purchases
ON
ProductEAN.EAN = Purchases.EAN
LEFT JOIN
(
SELECT
EAN,
COUNT(EAN) AS num_sales
FROM
Sale
GROUP BY
EAN
) Sales
ON
ProductEAN.EAN = Sales.EAN
因此,您可以獲取此代碼并將其存盤在視圖中。
請參閱此小提琴進行測驗:https ://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=b2d777f367960cf90d6539980c2ad935 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/460347.html
上一篇:請說明加盟?
下一篇:如何正確加入3個表
