mysql - 如何仅使用连接表中的某些行查找记录?

标签 mysql sql

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

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

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

我需要按当前位置的名称查找契约(Contract)(同时按其他契约(Contract)列)。

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

换句话说,我正在尝试编写一个查询,该查询将根据 location.namecontracts 返回行。

通常,这只是通过 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/

相关文章:

php - MySQL查询排序正确信息

Python pymssql : Adaptive Server connection failed

php - 我可以在 1 个 php 文件中包含多个 SQL SELECT 查询吗?

mysql - 每组选择四个项目?

mysql - 从 MySQL 中的 JSON 字符串中提取 key

MySQL If Date 语句?

sql - 具有多个聚合的 Linq to Sql 查询

mysql - 今天的日期和 SQL 中指定日期之间的天差

c# - Xamarin Android图像url数组到gridview中

mysql - 使用 JOINS 而不是子查询