我有一个具有这种布局的数据库...
contracts
---------
id
name
description
# Etc...
locations
---------
id
contract_id # FK to contracts.id
name
order_position
# Etc...
我需要按当前位置的名称
查找契约(Contract)(同时按其他契约(Contract)
列)。
当前位置是 order_position
最大的位置。
换句话说,我正在尝试编写一个查询,该查询将根据 location.name
从 contracts
返回行。
通常,这只是通过 location.contract_id
和 contracts.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/