簡體   English   中英

從兩個不同的表中連續減去兩列

[英]Subtract two columns from two different tables successively

我有兩個表, twentyBuyertwentySeller ,在這兩個表中,我有多個列,但我想拉出的一列是totalCost 我一直試圖找出一種方法,以便我可以連續從twentySeller.totalCost .總twentyBuyer.totalCost減去二十個twentyBuyer.totalCost .總twentySeller.totalCost 表格如下所示。

表二十買家

ID, Date,        Name,   TotalCost, Type
1,  "today",     "John", 46,        "ONE"
2,  "yesterday", "Doe",  506,       "ONE"

表二十賣家

ID, Date,        Name,     TotalCost, TYPE
1,  "today",     "Franko", 273,       "ONE"
2,  "yesterday", "Bob",    207,       "ONE"

起初,我嘗試使用 SELECT 語句提取信息,這樣我就可以很容易地做減法操作SELECT twentyBuyer.totalCost - twenty_seller.totalCost FROM twentyBuyer, twenty_seller; 我得到的

diff
299
-161
233
-227

我認為這種方式是錯誤的,所以我在谷歌上搜索了一些並遇到了連接。 當我開始使用INNER JOIN ,我幾乎得到了正確的結果,但還有兩個結果

代碼:

SELECT DISTINCT twenty_seller.totalCost, twentyBuyer.totalCost
FROM twenty_seller
LEFt OUTER JOIN twentyBuyer
ON 1=1;


totalCost | totalCost
207       | 506
273       | 506
207       | 46
273       | 46 

我試圖向它添加 UNIQUE ,但似乎沒有任何效果。 然后我切換到視圖,但遇到了類似的問題。 我刪除了視圖代碼,但遇到了類似的問題。

我希望結果像

difference
-227
299 

如果這是一個微不足道的問題,我深表歉意,但我無法弄清楚如何做到這一點,我認為有一個我還想不到的簡單解決方案。 任何幫助表示贊賞

數據庫不會嘗試匹配兩個表中的行 - 它執行笛卡爾積(即,將第一個表中的每一行與第二個表中的每一行進行匹配),並且由您提供一個條件告訴數據庫如何加入這些行。

在第一個示例中,您沒有條件,因此您將獲得 2*2 = 4 行。 這稱為交叉連接。 在第二個示例中,條件 1=1 始終評估為 true,因此盡管它不喜歡它,但它也是一個交叉連接,並產生與第一個查詢相同的結果。

假設您打算匹配具有相同 ID 的行,您需要提供此邏輯作為條件:

SELECT td.id, ts.totalCost - tb.totalCost
FROM   twenty_seller ts
JOIN   twentyBuyer tb ON ts.id = tb.id;

您正在尋找帶有一些數學運算的“AS”子句。

您也沒有為其提供任何要匹配的列,這意味着兩個表中的所有行都將按原樣返回。

您可以通過為其提供要匹配的特定列來解決此問題。

像這樣:

SELECT 
  twenty_seller.totalCost AS 'cost1',
  twentyBuyer.totalCost AS 'cost2',
  twenty_seller.totalCost-twentyBuyer.totalCost AS 'Difference'
FROM twenty_seller
LEFT OUTER JOIN twentyBuyer ON twenty_seller.ID=twentyBuyer.ID; 

或者,如果您只是想要區別:

SELECT 
  twenty_seller.totalCost-twentyBuyer.totalCost AS 'Difference'
FROM twenty_seller
LEFT OUTER JOIN twentyBuyer ON twenty_seller.ID=twentyBuyer.ID; 

如果你想要所有行的總數:

SELECT 
  SUM(twenty_seller.totalCost)-SUM(twentyBuyer.totalCost) AS 'Difference'
FROM twenty_seller
LEFT OUTER JOIN twentyBuyer ON twenty_seller.ID=twentyBuyer.ID;

暫無
暫無

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

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