sql三表关联查询
表org:表dic:表org_dic:idnameidnameidorgdicdatedata1aaa11zhang11112012-101002bbb12wang221...
表org: 表dic: 表org_dic:
id name id name id org dic date data
1 aaa 11 zhang 1 1 11 2012-10 100
2 bbb 12 wang 2 2 12 2012-10 200
3 ccc 13 liang 3 1 11 2012-12 300
4 ddd 14 fang 4 4 14 2012-10 400
怎么查询出表org_dic里的所有的数据,对于org、dic相同的记录取日期大的一条记录,求完整sql 展开
id name id name id org dic date data
1 aaa 11 zhang 1 1 11 2012-10 100
2 bbb 12 wang 2 2 12 2012-10 200
3 ccc 13 liang 3 1 11 2012-12 300
4 ddd 14 fang 4 4 14 2012-10 400
怎么查询出表org_dic里的所有的数据,对于org、dic相同的记录取日期大的一条记录,求完整sql 展开
展开全部
您描述的不详细,但从这这个简单的表看,我个人假设您所列表的 id 是他们的索引
先不看后面给的条件,先把表相连:
那么三表相连为 , 由于是针对org_dic所有的数据,所以在join时, 对org_dic用full join, :
select *
from org_dic
left outter join dic on org_dic.id=dic.id
left outter join org on org_dic.id=org.id
这么写,
然后是看条件。 对于org, dic相同的数据, 如果相同, 那么取 这组 org, dic相同数据组中最大日期。
那等于是在上面join形成的大表中按 org_dic中的 (org, dic)数据分组。
所以,等于是在group by (org, dic)
再回到上面的select. 刚才用了“*”代替你需要的查找结果,你实际的查找是寻找一个日期。 也就是org_dic.date
因此整合一下上面所讲的:
select max(org_dic.date)
from org_dic
left outter join dic on org_dic.id=dic.id
left outter join org on org_dic.id=org.id
group by (org, dic) .
这里要注意的是,由于你group by 了 (org, dic) 因此,你可以在select 里面显示 org, dic数据。 这里有个规则,我自己总结的,语言表述望包含: “Select 语句如果和group by 并用,那么 select所跟的列, 如果此列没有使用整合性函数,那么就必须要包含在group by 中”。 以上的语句语法是没有问题, 但是会发现结果全是日期,而不知道是那组的日期。
根据上面那个规则, 你可以写:select org_dic.org, org_dic.dic, max(org_dic.date) 。
所以最后结果为:
select org_dic.org, org_dic.dic, max(org_dic.date)
from org_dic
left outter join dic on org_dic.id=dic.id
left outter join org on org_dic.id=org.id
group by (org, dic);
先不看后面给的条件,先把表相连:
那么三表相连为 , 由于是针对org_dic所有的数据,所以在join时, 对org_dic用full join, :
select *
from org_dic
left outter join dic on org_dic.id=dic.id
left outter join org on org_dic.id=org.id
这么写,
然后是看条件。 对于org, dic相同的数据, 如果相同, 那么取 这组 org, dic相同数据组中最大日期。
那等于是在上面join形成的大表中按 org_dic中的 (org, dic)数据分组。
所以,等于是在group by (org, dic)
再回到上面的select. 刚才用了“*”代替你需要的查找结果,你实际的查找是寻找一个日期。 也就是org_dic.date
因此整合一下上面所讲的:
select max(org_dic.date)
from org_dic
left outter join dic on org_dic.id=dic.id
left outter join org on org_dic.id=org.id
group by (org, dic) .
这里要注意的是,由于你group by 了 (org, dic) 因此,你可以在select 里面显示 org, dic数据。 这里有个规则,我自己总结的,语言表述望包含: “Select 语句如果和group by 并用,那么 select所跟的列, 如果此列没有使用整合性函数,那么就必须要包含在group by 中”。 以上的语句语法是没有问题, 但是会发现结果全是日期,而不知道是那组的日期。
根据上面那个规则, 你可以写:select org_dic.org, org_dic.dic, max(org_dic.date) 。
所以最后结果为:
select org_dic.org, org_dic.dic, max(org_dic.date)
from org_dic
left outter join dic on org_dic.id=dic.id
left outter join org on org_dic.id=org.id
group by (org, dic);
2012-11-14
展开全部
select a.id,a.org,a.dic,max(a.date),a.data
from org_dic as a
left join org as b on a.org=b.id
left join dic as c on a.dic=c.id
group by a.id,a.org,a.dic,a.data
from org_dic as a
left join org as b on a.org=b.id
left join dic as c on a.dic=c.id
group by a.id,a.org,a.dic,a.data
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-11-12
展开全部
SELECT
*
FROM
org_dic main
WHERE
NOT EXISTS (
SELECT 1
FROM org_dic sub
WHERE
main.org = sub. org
AND main.dic = sub. dic
AND main.date< sub. date
)
*
FROM
org_dic main
WHERE
NOT EXISTS (
SELECT 1
FROM org_dic sub
WHERE
main.org = sub. org
AND main.dic = sub. dic
AND main.date< sub. date
)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-11-12
展开全部
select max(date ),id,org,dic from org_dic where date in(select date from a1 group by t2) group by id,org,dic
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
再补充一下吧,有点看不懂你的问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询