簡體   English   中英

具有多對多關系的3個表上的SQL查詢幫助

[英]SQL Query Help on 3 Tables with a Many to Many relationship

連接多個表以檢索所需數據時出現問題。 為了獲得適當的結果,我必須首先創建一個名為以下視圖(如下所示):vwinvgrossrev:

SELECT     dbo.inv_item.inv_num, dbo.inv_item.co_line, 
dbo.inv_hdr.co_num, dbo.inv_hdr.inv_date, dbo.inv_item.qty_invoiced, 
dbo.inv_item.price
FROM         dbo.inv_item INNER JOIN
dbo.inv_hdr ON dbo.inv_item.inv_num = dbo.inv_hdr.inv_num

然后我必須在最終表上加入視圖,以便對所需的值進行適當的求和

select sum(vwinvgrossrev.qty_invoiced*vwinvgrossrev.price) 
from     vwinvgrossrev,coitem
WHERE vwinvgrossrev.co_num=coitem.co_num 
AND coitem.Uf_Erne='Y'
AND vwinvgrossrev.co_line=coitem.co_line
AND DATEPART(mm,vwinvgrossrev.inv_date) = DATEPART(mm,Getdate()) 
AND YEAR(vwinvgrossrev.inv_date) = YEAR(Getdate())

我的問題是這個。 無論如何,是否可以在單個查詢中執行此操作。 問題是所有3個表之間都存在多對多關系,並且在連接所有3個表時總是返回錯誤的值。

您需要優化數據庫架構以規范多對多關系。 這是給定的,並且是標准實踐,無論您當前遇到什么問題。 它將簡化您當前的問題的事實就是原因。 那里有很多教程/博客/等,向您展示如何使用聯接表執行此操作,因此在此不做介紹。

如果您當前的查詢(使用視圖)為您提供所需的內容,那么我相信此查詢將在單個查詢中為您提供相同的東西:

SELECT sum(inv_item.qty_invoiced*inv_item.price) 
FROM     inv_item
JOIN inv_hdr ON dbo.inv_item.inv_num = dbo.inv_hdr.inv_num
JOIN coitem ON (inv_hdr.co_num=coitem.co_num 
    AND inv_item.co_line=coitem.co_line)
WHERE coitem.Uf_Erne='Y'
AND vwinvgrossrev.co_line=coitem.co_line
AND DATEPART(mm,inv_hdr.inv_date) = DATEPART(mm,Getdate()) 
AND YEAR(inv_hdr.inv_date) = YEAR(Getdate())

但是,如果您正在尋找,我會感到驚訝。

我假設您實際上在所有3個之間沒有多對多。我假設inv_hdr具有唯一的inv_num,而inv_item具有許多。 同樣,我假設co_num在inv_hdr中是唯一的,但在coitem中有多次出現。 這些不是多對多關系,而是一對多關系。 由於SELECT將行相乘,所以我認為您的求和方式將比您想要的更多。

你為什么要包括coitem在所有如果你是剛興趣inv_item.qty_invoicedinv_item.price 只是為了限制Uf_Erne列? coitem是否總是使用Uf_Erne='Y'來擁有該co_numco_line 1條記錄或0條記錄?

總而言之,我在沒有視圖的單個查詢中重現了您的查詢,但是我認為您可能需要考慮一下這是否真的是您想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM