首页 > 解决方案 > Mysql问题,如何使用选择进行有序双连接

问题描述

我有一个非常奇怪的问题,我似乎无法解决。

我有 2 个表,一个请求表和一个仓库表。

在我的请求中:

Material,Identifier,FulfillDateTime

在仓库表中,我有:

Material,Identifier,Position,DateofEntry

我需要做的是以下几点:

我正在搜索一种特定类型的材料('TypeA%') - 找到后,我需要将通过同一标识符定位的另一种材料('TypeB%')与此相关联。这始终只返回一个结果,这意味着对于该特定材料请求,标识符是相同的,该特定材料请求始终包含每种材料类型的单个材料。

在此之后,我需要检查仓库表,其中使用找到的特定材料类型 (TypeB),并按照最旧的 DateOfEntry 排序的位置。

我想不通的是,我的查询在仓库中返回了相同的材料,但我需要按进入日期返回的有序列表中的“下一个”。

我期望的是一个看起来像这样的结果表,按fulfillDateTime 排序

MaterialTypeA,Identifier,FulfillDateTime,Position,DateOfEntry

我正在使用的当前查询是这个(它是错误的,因为它从仓库表中正确返回,但它为每一行返回相同的材料,并且它不是由 dateofentry '排序'。

SELECT
   *
FROM
   requests
   LEFT JOIN
      (
         select
            Identifier as B_Identifier,
            Material as B_Material,
            FulfillDateTime
         from
            requests
            LEFT JOIN       (
         SELECT
            Material,
            Identifier,
            Position,
            DateofEntry
         FROM
            warehouse
         where
            Material like 'TypeB%'
         order by
            DateofEntry desc
      )
      as d
      on Material = Material
         where
            requests.Material like 'TypeB%'
      )
      as t
      on requests.Identifier = t.Identifier
where
   requests.Material LIKE 'TypeA%' and
   (DATE(DateofEntry) BETWEEN DATE(NOW()) AND (DATE(NOW() + INTERVAL 1 DAY)))
group by
   requests.Identifier
order by
   DateofEntry desc;

有人可以将我推向正确的方向吗?

基本上这是从仓库制作一个拣货单,每种物料都附加了另一种物料,对于该物料,我们需要去仓库中获取最旧的物料。该列表应包含倒序排列的所有材料。

标签: mysqljoin

解决方案


推荐阅读