gpt4 book ai didi

mysql - 我无法将我的头围绕在连接上

转载 作者:行者123 更新时间:2023-11-30 01:32:06 25 4
gpt4 key购买 nike

所以,好吧,我有几张 table 。我当前的查询针对“历史”表运行。我想要进行某种连接以从当前表中获取最新状态。这些表共享一个类似的列,称为“ID”

结构如下

ddCurrent
-ID
-Location
-Status
-Time

ddHistorical
-CID (AI field to keep multiple records per site)
-ID
-Location
-Status
-Time

我现在的目标是进行一个简单的连接,以获取 ddHistorical 中的所有变量和 ddCurrent 中的当前状态。

我知道它们可以在 ID 上连接,因为它们的 ID 表中都有相同的项目,我只是不知道哪种连接是合适的或者为什么?

最佳答案

我确信有人可能会提供一个具体的链接来详细解释,但我会尝试以这种方式进行总结。在编写查询时,我尝试从要从中获取数据的表的位置列出表,并将其作为“FROM”子句中的第一个表。然后,根据关系(例如 ID)对其他表执行“JOIN”条件。在你的例子中

FROM
ddHistorical ddH
INNER JOIN ddCurrent ddC
on ddH.ID = ddC.ID

在这种情况下,INNER JOIN(与 JOIN 相同)ddHistorical 表是左表(为了样式一致性和缩进而首先列出),ddCurrent 是右表。请注意,我将它们连接在一起的 ON 标准也是 left alias.column = right alias table.column ——同样,这只是为了心理关联的目的。

内连接(或 JOIN)意味着记录的每一侧都必须有匹配项,否则将被丢弃。

左连接意味着给我左表(本例中为 ddHistorical)中的所有记录,无论右表(ddCurrent)中是否匹配。在此示例中不实用。

右连接是相反的...给我右侧表中的所有记录,无论左侧表中是否有匹配的记录。大多数时候,您会看到 LEFT-JOIN 比 RIGHT-JOIN 更频繁。

现在,这是一个在头脑中获得左连接的示例。您在一家汽车经销商工作,有一个包含 10 辆已售汽车的主表。对于给定的月份,您想知道哪些产品卖不出去。因此,从所有汽车的主表开始,查看销售表以了解实际销售的产品。如果没有此类销售事件,右侧表将具有 NULL 值

select
M.CarID,
M.CarModel
from
MasterCarsList M
LEFT JOIN CarSales CS
on M.CarID = CS.CarID
AND month( CS.DateSold ) = 4
where
CS.CarID IS NULL

因此,我的 LEFT 加入基于匹配的汽车 ID -- 并且 -- 销售事件月份是 4(4 月),因为我可能不关心 1-3 月的销售 -- 但也符合资格年份,但这是一个简单的示例。

如果 Car Sales 表中没有记录,则所有列都将为 NULL 值。我只是碰巧关心汽车 ID 列,因为那是连接基础。这就是为什么我将其包含在 WHERE 子句中。对于所有其他类型的确实有销售的汽车来说,它都会有值(value)。

这是一种常见的方法,您会在查询中看到有人在不考虑其他情况下查找所有内容...有些人使用 where NOT EXIST ( subselect ),但这些方法执行速度较慢,因为它们对每条记录进行测试。进行连接要快得多。

其他示例可能是您想要公司所有员工的列表,并且他们是否有一些认证/培训来显示它...您仍然想要所有员工,但左连接到某些认证/培训表会暴露根据需要添加这些额外字段。

select
Emp.FullName,
Cert.DateCertified
FROM
Employees Emp
Left Join Certifications Cert
on Emp.EmpID = Cert.EmpID

希望这些示例可以帮助您更好地理解查询之间的关系,并现在真正为您的需求提供答案。

如果您想要的是所有“当前”项目的列表,并想查看它们的历史记录,我会首先使用当前。如果您当前的表格有 50 个项目,但历史上您的表格有 420 个项目,则可能会出现这种情况。您不关心其他 360 项目,只关心当前的项目及其历史记录。

select
ddC.WhateverColumns,
ddH.WhateverHistoricalColumns
from
ddCurrent ddC
JOIN ddHistorical ddH
on ddC.ID = ddH.ID

关于mysql - 我无法将我的头围绕在连接上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17324569/

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