簡體   English   中英

MySQL左連接並有特定條件

[英]MySQL Left Join with Specific Condition

我有以下表格可以管理收入

收益表

+------------+--------+--------+
| revenue_id | amount | status |
+------------+--------+--------+
|          1 |  45000 |      1 |
|          2 |  25000 |      1 |
|          3 |  67000 |      1 |
|          4 |  22000 |      1 |
|          5 |  32000 |      0 |
+------------+--------+--------+

銀行表

+---------+--------+-------------+-------------+
| bank_id | ref_no | bank_amount | bank_status |
+---------+--------+-------------+-------------+
|       1 |      2 |       23000 | Pending     |
|       2 |      3 |       67000 | Confirmed   |
|       3 |      4 |       22000 | Confirmed   |
+---------+--------+-------------+-------------+

02)如果收入表中提到的收入已經存入銀行,則將其記錄在銀行表中。 此后,兩個表中的金額相等,則銀行狀態可以變為“已確認”。

03)因此,我需要通過連接上面的兩個表來僅獲取以下確認記錄

期望的輸出

+------------+--------+-------------+-------------+
| revenue_id | amount | bank_amount | bank_status |
+------------+--------+-------------+-------------+
|          3 |  67000 |       67000 | Confirmed   |
|          4 |  22000 |       22000 | Confirmed   |
+------------+--------+-------------+-------------+ 

期望的輸出-02

+------------+--------+-------------+-------------+
| revenue_id | amount | bank_amount | bank_status |
+------------+--------+-------------+-------------+
|          1 |  45000 |             |             |
|          2 |  25000 |       23000 | Pending     |
|          3 |  67000 |       67000 | Confirmed   |
|          4 |  22000 |       22000 | Confirmed   |
+------------+--------+-------------+-------------+

期望的輸出-03

+------------+--------+-------------+-------------+
| revenue_id | amount | bank_amount | bank_status |
+------------+--------+-------------+-------------+
|          1 |  45000 |             |             |
|          2 |  25000 |       23000 | Pending     |
+------------+--------+-------------+-------------+

04)為了獲得所需的輸出,我使用了以下查詢

select revenue.revenue_id, revenue.amount, bank.bank_amount, bank.bank_status 
from revenue
left join bank on bank.ref_no = revenue.revenue_id
where revenue.status = 1 and bank.bank_status = "Confirmed"

05)但是沒有得到預期的結果。 它僅生成空結果。 我不明白我要怎么做。 誰能幫我 ?

您必須使用內部聯接而不是左聯接來獲得預期的輸出。

SELECT revenue.revenue_id,
       revenue.amount,
       bank.bank_amount,
       bank.bank_status
FROM revenue
INNER JOIN bank ON bank.ref_no = revenue.revenue_id
WHERE revenue.status = 1
  AND bank.bank_status = "Confirmed"

DEMO

select revenue.revenue_id, revenue.amount, bank.bank_amount, bank.bank_status 
from revenue
Inner join (select * 
              From bank
              Where bank_status = "Confirmed") bank
on bank.ref_no = revenue.revenue_id

您必須使用第一個銀行表,然后使用收入表進行左聯接。 因為在左連接中,即使沒有匹配項,也將返回所有行。

因此,使用這樣的查詢。 從bank.ref_no = Revenue.revenue_id上​​,從bank的左左連接收入中選擇Revenue.revenue_id,inventory.amount,bank.bank_amount,bank.bank_status,其中Revenue.status = 1並且bank.bank_status =“ Confirmed”

暫無
暫無

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

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