MySQL使用不同的行连接相同的列
我有两个与项目相关的表,如下所示 表“旧_项目” 表,“新项目” 02)如果一个项目在新项目表中有旧项目号和status=“revied”,则金额字段应更改如下: 例如:- a) 项目编号004的金额=旧项目表中项目编号001的金额-新项目表中项目编号004的金额 b) 项目编号006的金额=旧项目表中项目编号003的金额-新项目表中项目编号006的金额 03)之后,通过连接两个表,所需输出应如下所示:MySQL使用不同的行连接相同的列,mysql,Mysql,我有两个与项目相关的表,如下所示 表“旧_项目” 表,“新项目” 02)如果一个项目在新项目表中有旧项目号和status=“revied”,则金额字段应更改如下: 例如:- a) 项目编号004的金额=旧项目表中项目编号001的金额-新项目表中项目编号004的金额 b) 项目编号006的金额=旧项目表中项目编号003的金额-新项目表中项目编号006的金额 03)之后,通过连接两个表,所需输出应如下所示: +------------+-----------+--------------+-----
+------------+-----------+--------------+----------+
| project_no | project | amount | status |
+------------+-----------+--------------+----------+
| 001 | project1 | 75,000.00 | original |
| 004 | project4 | 50,000.00 | revised |
| 003 | project3 | 150,000.00 | original |
| 006 | project6 | 70,000.00 | revised |
+------------+-----------+--------------+----------+
04)因此,我使用了以下查询
SELECT
project_no,
project,
old_project.amount - new_project.amount,
status
FROM
new_project
JOIN
old_project ON old_project.project.no = new_project.project.no
WHERE
project_no IN (SELECT project_no
FROM new_project
WHERE status="revised")
05)但未获得所需的输出。我不明白我出了什么问题。有人能帮我吗?- 您只需从
表向新项目
上的项目编号
表执行旧项目
左联接
- 现在,我们可以使用表达式,有条件地计算数量值
- 如果有相应的旧项目(旧项目金额),我们可以计算差额;否则使用新的项目金额
SELECT
np.project_no,
np.project,
CASE
WHEN op.amount IS NOT NULL THEN op.amount - np.amount
ELSE np.amount
END AS amount,
np.status
FROM new_project AS np
LEFT JOIN old_project AS op ON op.old_project_no = np.project_no
@Madhur Bhaiya。不,这是一个简单的错误。不是项目10和项目11。这是project4和Project6为什么在输出表中没有project2和project5?此外,项目4和项目6的金额与描述的计算不匹配。请修复所需的输出,以便人们不会混淆,项目4的金额目标(基于您的描述)应为
75000.00-50000.00=25000.00
,而不是50000.00
。您是正确的。但在旧项目表中执行的金额扣减。新的项目表是conceptual@MCITTrends你可以做“自动加入”。将新项目
替换为旧项目
(在同一个表之间左连接)。@MCITTrends您的问题根本没有提到这个细节,所有内容都在同一个表中。您是正确的。你是自由职业者吗。我们有一些codeigniter mysql项目要做。如果是,请将您的详细信息发送给我mcodeit@gmail.com
SELECT
project_no,
project,
old_project.amount - new_project.amount,
status
FROM
new_project
JOIN
old_project ON old_project.project.no = new_project.project.no
WHERE
project_no IN (SELECT project_no
FROM new_project
WHERE status="revised")
SELECT
np.project_no,
np.project,
CASE
WHEN op.amount IS NOT NULL THEN op.amount - np.amount
ELSE np.amount
END AS amount,
np.status
FROM new_project AS np
LEFT JOIN old_project AS op ON op.old_project_no = np.project_no