gpt4 book ai didi

mysql - 从两个数据库表中选择输出到一个输出

转载 作者:行者123 更新时间:2023-11-29 06:27:33 25 4
gpt4 key购买 nike

我有两个表,运算符(operator)(操作飞机)和历史(历史是飞机的运动)。我需要做的只是显示历史表上具有“事件”标志的运算符(operator)作为最后一个条目。例如,我在历史表中记录了一架飞机的 10 个条目。最后一个条目是英国航空公司的,并且该飞机处于事件状态。因此,这应该允许英国航空公司列在输出中。然后我有 10 架飞机的条目,这架飞机曾属于 Fly Uk,后来被卖给了英国航空公司。两者都拥有或正在拥有这架飞机,但由于英国航空是该飞机当前的活跃运营商,因此不应在此列表中显示 FLY UK。两个运营商都可能在列表中拥有多架飞机,一些处于事件状态,一些处于订购、存储等状态。表格 -

历史有一个运算符(operator)和状态字段(可以是事件的、存储的、报废的、注销的)

飞机有一个 OperatorName 字段

所以应该是这样的

select * 
from operators
where max history.status = 'active' or 'stored' or 'grounded';

但是它不起作用?

我已经尝试了各种代码,更改了 php 版本,但情况并没有更好

select * 
from operators
where max history.status = 'active' or 'stored' or 'grounded';

我没有得到任何输出

最佳答案

您可以使用相关子查询:

select o.*
from operators o
where (
select h.status
from history h
where h.operatorName = o.operatorName
order by h.operationDate desc
limit 1
) in ('active', 'stored', 'grounded')

在 MySQL 8.0 中,窗口函数派上用场:

select *
from (
select
o.*,
h.status,
rank() over(partition by h.operatorName order by h.operationDate desc) rn
from operators
inner join history h on h.operatorName = o.operatorName
) t
where
rn = 1
and status in ('active', 'stored', 'grounded')

history.status = 'active' 或 'stored' 或 'grounded' 将无法按您的预期工作。这将永远是true

实际上有 3 个条件语句:
history.status = '事件'
'已存储'
“接地”

'stored''grounded'永远为 false,因为非空字符串不是 considered false

您的条件可以这样重写,并保留逻辑:(history.status = 'active') 或 (TRUE) 或 (TRUE) 计算结果为 TRUE 无论 history.status 的值是什么

关于mysql - 从两个数据库表中选择输出到一个输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58625892/

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