Mysql 内部查询很难编写

Mysql 内部查询很难编写,mysql,sql,Mysql,Sql,我有两张桌子: customer带有schema\u id 架构表有:Schema\u id、期间、金额、更新日期 我需要获取customer和schema的连接,但只检索最新连接的记录,而不检索其他记录 customer table cust_id name schema_id 1 ABC 1 模式表 schema_id period amt updated_date 1 1 100 2010-4-1 1 2 1

我有两张桌子:

customer
带有
schema\u id

架构表有:
Schema\u id、期间、金额、更新日期

我需要获取customer和schema的连接,但只检索最新连接的记录,而不检索其他记录

customer table

cust_id  name schema_id
1        ABC  1
模式表

schema_id  period amt updated_date
1          1      100  2010-4-1
1          2      150  2011-4-1
如果您需要每个
架构id
max(updated\u date)
,则可以使用子查询:

select c.cust_id, c.name, c.schema_id, s.period, s.amt, s.updated_date
from customer c
inner join
(
  select s1.schema_id, s1.period, s1.amt, s1.updated_date
  from `schemas` s1
  inner join 
  (
    select schema_id, max(updated_date) MaxDate
    from `schemas`
    group by schema_id
  ) s2
    on s1.schema_id = s2.schema_id
    and s1.updated_date = s2.maxdate
) s
  on c.schema_id = s.schema_id


然后,子查询用于连接回您的表,以返回具有匹配日期和模式id的行。

如果我理解您的问题,您需要获取“模式”的最新寄存器

我认为您需要使用max()函数。因此,请尝试以下查询:

select *
from customer c,
     schema s
where c.schema_id = s.schema_id
  and s.updated_date = ( select max(s2.updated_date)     
                         from schema s2
                         where s2.schema_id = s.schema_id
                       )
问候


Edmilton

请通过添加适当的标记(Oracle、SQL Server、MySQL等)来指定您要针对的RDBMS。可能有一些答案利用了并非普遍支持的语言或产品功能。此外,通过使用特定的RDBMS标记,您的问题可能会得到更适合回答它的人的注意。@AbhijitShelar
t1
没有
更新日期是什么意思?
updated_date
在您的表中。这是在进行自联接,以获取每个
schema\u id
max(updated\u date)
的行。第一个表只有schema\u id作为列之一。请始终明确指定联接,不要使用隐式联接语法(逗号分隔
FROM
子句)。“除其他外,它使关于某些连接条件的推理变得极其困难。”发条缪斯说,“哦,是的,绝对是这样。”。我可能已经写了一些关于这一点:感谢发条缪斯和@aaron bertrand的提示。但我认为这是主观的!顺便说一句,我会读到的,包括亚伦的帖子@埃德米尔顿:我不认为2013年会有那么主观。由于旧式的外部联接已被弃用,您将如何向该查询添加(例如)左联接?您是否发现将筛选条件与连接条件分开并明确声明您的意图更容易,更不用说避免意外交叉连接了?@AaronBertrand,真的。这是有道理的!我做一个混音。我使用老式的“内部连接”。如果我需要使用左/右连接,我会使用新样式(no-so-new)。这种方式对我和我参加过的其他团队都很有效,但是,我保证,我会读更多关于这方面的内容。=)也许我一直都错了!非常感谢。