gpt4 book ai didi

mysql - 从表上的多个联接获取数据的有效方法

转载 作者:行者123 更新时间:2023-11-30 01:31:37 26 4
gpt4 key购买 nike

我是编写 SQL 的新手,并且手头有一个遗留系统,可以使用下面给出的三个表:

Table A
=========
id | tracker_id | created_on | status | p_id
1 | 1 | ... | (Table C latest new_val ) 4 | 121

Table B
=========
id | a_id | created_on |
1 | 1 | 2013-12-12 15:15:16
2 | 1 | 2013-12-15 15:20:16
3 | 1 | 2013-12-15 15:25:16
4 | 1 | 2013-12-15 15:30:16
5 | 1 | 2013-12-15 16:20:16
6 | 1 | 2013-12-16 17:20:16
7 | 1 | 2013-12-25 16:25:16


Table C
=========
id | b_id | type | old_val | new_val
1 | 1 | type1| 1 | 2
2 | 2 | type1| 2 | 3
3 | 3 | type1| 3 | 4
4 | 4 | type1| 4 | 5
5 | 5 | type1| 5 | 3
6 | 6 | type1| 3 | 5
7 | 7 | type1| 5 | 3

我想获取表 A id 在任何特定日期(例如 2013-12-13 和 2013-12-17)之间的计数以及该时间范围内表 C new_val 的特定最新值,因此在上面的情况下,如果我查询在“2013-12-13 和 2013-12-17”之间,p_id 为 121,表 C new_val 为 5 我应该得到 1 。另外,如果我在“2013-12-13 和 2013-12-17”之间查询,表 C new_val 为 3 我应该得到 0 。

我写了一个表单的查询

Select count(tableA.id) from tableA tableA 
inner join tableB tableB on tableA.id=tableB.a_id
inner join tableC tableCdetails on tableB.id=tableCdetails.b_id
where tableCdetails.type = 'type1' and tableCdetails.new_val='5'
and tableB.created_on between '2013-12-13' AND '2013-12-17'
and tableA.p_id = 121

我使用试错法尝试了一些组合,并且在某些情况下通过上述查询得到了某些值,但这与系统中的某些其他值不匹配。我认为我错过了这样一个事实:我需要获取该时间范围的最新 tableB id 并匹配与该 tableB id 对应的 tableC 条目的 new_val ,不幸的是我无法弄清楚如何获取它。有人可以指导我如何在上述查询中或使用任何其他方法来完成此操作(或者我以完全错误的方式进行查询)。

最佳答案

您确实需要获取最新的 b 值。一种方法是将条件放在 from 子句中作为附加联接。另一种方法是使用 where 子句和相关子查询:

where tableB.created_on = (select max(created_on)
from tableB b2
where b2.a_id = tableA.id
) and
. . . /* the rest of your conditions here */

关于mysql - 从表上的多个联接获取数据的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17385558/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com