2013-04-27 51 views
0

我需要从一个关联的数据库中提取关联的名称和最后一个付费共享,但经过一天的尝试,我根本无法提取该数据。最大左加入微软sql服务器

表senhas代表股份,表associados相关数据和senhas_associados,代表一个员工支付的股份,因为这是一个多对多的关系。

为了查询这个,我试图用senhas_associados中代表付费份额的seassoc_senha_id中的最大id(senha)查询共享。

这里是我试过到目前为止:

首先,我已经试过这种说法,是所需的输出,但它并没有显示谁没有支付其所需的任何应占联营公司(在senhas_associados没有记录):

SELECT assoc_nome, senha_desig 
FROM associados, senhas, senhas_associados 
WHERE assoc_id = seassoc_assoc_id 
AND seassoc_senha_id = senha_id 
AND seassoc_senha_id IN (SELECT max(seassoc_senha_id) 
FROM senhas, senhas_associados 
WHERE seassoc_senha_id = senha_id 
AND seassoc_assoc_id = assoc_id) 

输出:

assoc_nome | senha_desig 
------------------------------ 
Carlos Costa | Maio 
Rodrigo  | Abril 

我甚至尝试添加此:

SELECT assoc_nome, senha_desig 
FROM associados, senhas, senhas_associados 
WHERE assoc_id = seassoc_assoc_id 
AND seassoc_senha_id = senha_id 
AND seassoc_senha_id IN (SELECT max(seassoc_senha_id) 
FROM senhas, senhas_associados 
WHERE seassoc_senha_id = senha_id 
AND seassoc_assoc_id = assoc_id) OR senha_desig is null 

无济于事,输出是一样的。

然后,我已经改变了“战术”,前往左的连接:

SELECT assoc_nome, senha_desig 
FROM associados 
LEFT JOIN senhas_associados ON associados.assoc_id = senhas_associados.seassoc_assoc_id 
LEFT JOIN senhas ON senhas.senha_id = senhas_associados.seassoc_senha_id 

输出:

assoc_nome | senha_desig 
-------------------------  
Carlos Costa | Abril 
Carlos Costa | Janeiro 
Carlos Costa | Fevereiro 
Carlos Costa | Maio 
Rodrigo  | Janeiro 
Rodrigo  | Fevereiro 
Rodrigo  | Abril 
Pedro Soares | NULL 

现在它显示空的,但我找不到放在哪里最大功能。

所以我请求你的帮助,因为今天的下午,我坚持这一点。

谢谢大家,

问候。

下面是相关表的关系模型:http://i44.tinypic.com/30aykv8.png

回答

0
SELECT max(senha_id),assoc_nome,senha_desig 
    FROM associados a 
    LEFT JOIN (senhas_associados sa 
      LEFT JOIN senhas s 
      on sa.senha_id = sa.seassoc_senha_id) 
    ON a.assoc_id = seassoc_assoc_id 
    GROUP BY assoc_nome,senha_desig 
+0

问题解决了。非常感谢理查德。只改变了sa到s。 – Digmoons 2013-04-27 02:07:05

+0

另外,有没有办法显示senha_desig而不是senha_id? – Digmoons 2013-04-27 02:12:48