【问题标题】:MYSQL INNER JOIN unexpected resultMYSQL INNER JOIN 意外结果
【发布时间】:2026-01-18 08:20:04
【问题描述】:

我的 MySQL 内部连接出现问题。我的INNER JOIN 没有给我想要的结果。我的 Table1 包含 TrackNo,然后 Table2 包含每个 trackNoTable1 的详细信息。

>> 表结构:

>> SQL 代码:

SELECT tr.trackNo AS 'TrackNo',
       trD.Status,
       MAX(trD.DatePosted) AS `Date/Time`
FROM Tracking AS tr
INNER JOIN TrackingDetails AS trD
ON tr.trackNo = trD.trackNo
WHERE tr.ClientID='client01'
AND trD.trackNo IN ('xx000001','xx000002','xx000003')
AND trD.DatePosted IS NOT NULL 
AND trD.Status IN (
                'Received',
                'Logged',
                'Prepped',
                'Analyzed',
                'Reviewed',
                'Final Report',
                'Invoiced')
GROUP BY tr.trackNo
ORDER BY tr.trackNo ASC

这是上面的结果查询:

如您所见,上面的查询结果图像是正确的,除了Status 列。我的SQL 查询哪里出错了?我错过了什么?

>> 所需输出:

+----------+----------+---------------------+
|  TrackNo |  Status  |      Date/Time      |
+==========+==========+=====================+
| xx000001 | Logged   | 2015-03-09 17:53:14 |
+----------+----------+---------------------+
| xx000002 | Prepped  | 2014-08-15 17:19:00 |
+----------+----------+---------------------+
| xx000003 | Analyzed | 2014-10-10 11:12:00 |
+----------+----------+---------------------+

提前致谢!

【问题讨论】:

  • 您确定是产生这些结果的代码吗?你有SELECT tr.trackNo AS 'TrackNo',但它似乎以trackingNo 出现,我在TrackingDetails 表中看不到任何DatePosted 字段,我假设它是上面的表2
  • @colmde:哎呀。我的错。我修改了确切的表格。是 TABLE2 是 TrackingDetails 和 Date/Time = DatePosted

标签: mysql join


【解决方案1】:

这应该会给你正确的结果:

select * from TrackingDetails as a join (
    SELECT tr.trackNo AS 'TrackNo',
           MAX(trD.DatePosted) AS 'Date_Time'
    FROM Tracking AS tr
    INNER JOIN TrackingDetails AS trD
    ON tr.trackNo = trD.trackNo
    WHERE tr.ClientID='client01'
    AND trD.trackNo IN ('xx000001','xx000002','xx000003')
    AND trD.DatePosted IS NOT NULL 
    AND trD.Status IN (
                    'Received',
                    'Logged',
                    'Prepped',
                    'Analyzed',
                    'Reviewed',
                    'Final Report',
                    'Invoiced')
    GROUP BY tr.trackNo
    ORDER BY tr.trackNo ASC

) as x on x.TrackNo = a.trackNo and a.DatePosted = x.'Date_Time'

如果您在 mysql 中使用 group by,则未指定您从不在聚合函数或 group by 语句中的列中获得的值。在大多数其他 DBMS 中,不允许选择此类列。

【讨论】:

  • 谢谢!真的行!谢谢你的解释。
  • @qwerty 抱歉,错误并感谢您的提示。我已经改了。
最近更新 更多