MySQL select语句缺少某些字段

时间:2020-02-02 14:16:27

标签: mysql

我有以下语句,用于从MySQL DB中选择某些字段

select finance_budget_issue.budget_date, SUM(finance_budget_issue.amount) AS amount, finance_vote.office_id as vote_office_id, finance_office.office_head as head,
    finance_office.office_name AS office_name,
    finance_budget.ref_no, finance_budget_issue.view_status, tbl_signature.office_head as sign_office_head, tbl_signature.name AS name, 
    tbl_signature.post AS post, tbl_signature.sign_id
   from finance_budget_issue
    inner join finance_budget on finance_budget.budget_id=finance_budget_issue.budget_id
  left join finance_vote on finance_budget_issue.vote_id=finance_vote.vote_id
  left  join finance_vote_description on finance_vote.description=finance_vote_description.vote_description_id
  left join finance_office on finance_budget_issue.office=finance_office.office_id
  left join tbl_signature on finance_office.office_id=tbl_signature.office_id

该语句运行正常,但没有超出以下字段

tbl_signature.office_head as sign_office_head, 
tbl_signature.name AS name, 
tbl_signature.post AS post

可能出什么问题了?我认为我使用了不正确的联接。有人可以帮忙吗?

表如下:

finance_office

+----+-----------+-------------+------+
| id | office_id | office_name | head |
+----+-----------+-------------+------+
|  1 |        48 | A           | SS   |
|  2 |        69 | B           | VV   |
+----+-----------+-------------+------+

finance_vote

+---------+-----------+----------------+
| vote_id | office_id |      vote      |
+---------+-----------+----------------+
|       1 |        48 | 320-1-2-1-1001 |
|       2 |        48 | 320-2-2-2-2002 |
|       3 |        69 | 319-1-2-1-1001 |
|       4 |        69 | 319-1-2-2-1102 |
|       5 |        30 | 318-1-1-2-1101 |
+---------+-----------+----------------+

tbl_signature

+---------+-----------+---------+------------+-------------+
| sign_id | office_id |  name   |    post    | office_head |
+---------+-----------+---------+------------+-------------+
|       1 |        48 | Noel    | Accountant | Manager     |
|       2 |        69 | Jhon    | Accountant | Manager     |
|       3 |        30 | Micheal | Accountant | Manager     |
+---------+-----------+---------+------------+-------------+

finance_budget

+-----------+--------+-------------+
| budget_id | ref_no | budget_date |
+-----------+--------+-------------+
|         1 | Acc/01 | 2020-01-20  |
|         2 | Acc/02 | 2020-01-22  |
+-----------+--------+-------------+

finance_budget_issue

+----+-----------+--------+---------------+-----------------+
| id | budget_id | amount | budget_status | transfer_status |
+----+-----------+--------+---------------+-----------------+
|  1 |         1 |  75000 | issues        | Approved        |
|  2 |         1 |  22000 | issues        | Approved        |
|  3 |         2 |  65000 | issues        | Approved        |
+----+-----------+--------+---------------+-----------------+

所需的输出

+--------+----------------+------+--------+------------------+------+------------+
| amount | vote_office_id | head | ref_no | sign_office_head | name |    post    |
+--------+----------------+------+--------+------------------+------+------------+
|  75000 |             48 | SS   | Acc/01 | Manager          | Noel | Accountant |
|  22000 |             48 | SS   | Acc/01 | Manager          | Noel | Accountant |
|  65000 |             69 | VV   | Acc/02 | Manager          | Jhon | Accountant |
+--------+----------------+------+--------+------------------+------+------------+

生成的输出(不正确)

+--------+----------------+------+--------+------------------+------+------+
| amount | vote_office_id | head | ref_no | sign_office_head | name | post |
+--------+----------------+------+--------+------------------+------+------+
|  75000 |             48 | SS   | Acc/01 |                  |      |      |
|  22000 |             48 | SS   | Acc/01 |                  |      |      |
|  65000 |             69 | VV   | Acc/02 |                  |      |      |
+--------+----------------+------+--------+------------------+------+------+

1 个答案:

答案 0 :(得分:1)

这更容易阅读:

SELECT i.budget_date
     , SUM(i.amount) amount
     , v.office_id vote_office_id
     , o.office_head head
     , o.office_name 
     , b.ref_no
     , i.view_status
     , s.office_head sign_office_head
     , s.name 
     , s.post 
     , s.sign_id
  FROM finance_budget_issue i
  JOIN finance_budget b
    ON b.budget_id = i.budget_id
  LEFT 
  JOIN finance_vote v 
    ON v.vote_id = i.vote_id
  LEFT  
  JOIN finance_vote_description d
    ON d.vote_description_id = v.description 
  LEFT 
  JOIN finance_office o 
    ON i.office = o.office_id
  LEFT 
  JOIN tbl_signature s
    ON s.office_id = o.office_id 

您有一个聚合函数(和非聚合列),但是没有GROUP BY子句;那是行不通的。您有一个LEFT JOINed表,从中不选择任何列。那没有意义。

有关更多帮助,请参见Why should I provide an MCRE for what seems to me to be a very simple SQL query

相关问题