我有一个具有这种布局的数据库...

contracts
---------
id
name
description
# Etc...

locations
---------
id
contract_id  # FK to contracts.id
name
order_position
# Etc...


我需要按合同当前位置的name(以及同时通过其他contracts列)查找合同。

当前位置是order_position最大的位置。

换句话说,我正在尝试编写一个查询,该查询将基于contractslocation.name返回行。

通常,这只是通过location.contract_idcontracts.id的简单连接。

例如,这是简单的情况,不需要其他要求...

SELECT c.*
FROM contracts c, locations l
WHERE
  c.id = l.contract_id
AND
  c.name LIKE '%bay%'
AND
  l.name LIKE '%admin%';


但是,额外的要求是我想将其范围缩小到对order_position具有最大价值的合同位置。

有没有一种方法可以做到这一点?

最佳答案

这样的事情应该起作用:

SELECT c.id,
       c.name,
       loc2.name,
       loc2.order_position
  FROM dbo.contracts c
 INNER JOIN (
    SELECT loc.contract_id,
               MAX(loc.order_position) AS order_position
      FROM locations loc
     GROUP BY contract_id
        ) loc
    ON c.id = loc.contract_id
  LEFT JOIN dbo.locations loc2
    ON loc2.contract_id = loc.contract_id
   AND loc2.order_position = loc.order_position

关于mysql - 如何仅使用联接表中的某些行查找记录?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20445752/

10-12 02:10