简体   繁体   English

MySQL左连接并有特定条件

[英]MySQL Left Join with Specific Condition

I have following tables that manage revenue 我有以下表格可以管理收入

revenue Table 收益表

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

bank Table 银行表

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

02) If a revenue as mentioned in the revenue table has banked, it is recorded in the bank table. 02)如果收入表中提到的收入已经存入银行,则将其记录在银行表中。 After that, the amounts in two tables are equal, the bank status may be into "Confirmed". 此后,两个表中的金额相等,则银行状态可以变为“已确认”。

03) So, I need to get Confirmed records only as following by joining above two tables 03)因此,我需要通过连接上面的两个表来仅获取以下确认记录

Desired Output 期望的输出

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

Desired Output-02 期望的输出-02

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

Desired Output-03 期望的输出-03

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

04) To get the desired output I used the following query 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) But did't get the expected result. 05)但是没有得到预期的结果。 It generated only the empty result. 它仅生成空结果。 I can not understand what I am going wrong. 我不明白我要怎么做。 Can any one help me ? 谁能帮我 ?

You have to use Inner Join instead of Left JOIN for your expected output. 您必须使用内部联接而不是左联接来获得预期的输出。

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 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

You have to use the first bank table and then revenue table for left join . 您必须使用第一个银行表,然后使用收入表进行左联接。 Because in left join all rows will be returned even without matches. 因为在左连接中,即使没有匹配项,也将返回所有行。

So, use query like this. 因此,使用这样的查询。 select revenue.revenue_id, revenue.amount, bank.bank_amount, bank.bank_status from bank left join revenue on bank.ref_no = revenue.revenue_id where revenue.status = 1 and bank.bank_status = "Confirmed" 从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