看看你能写出这个查询么?

按家庭收藏书籍的多少统计查询
4张表:(本应该有人员表和书籍表给这4张表提供外键,在此省略)
1:家庭表(family)家庭成员
family father mather child
张家 张父 张母 张三
李家 李父 李母 李四
王家 王父 王母 王五
2:父亲和书(father_book)父亲看的书籍
id father book
1 张父 《SQL Server》
2 张父 《MYSQL》
3 王父 《Access》
3:母亲和书(mather_book)母亲看的书籍
id mather book
1 李母 《Oracle》
2 李母 《Sybase》
3 张母 《Oracle》
4 王母 《Access》
4:孩子和书(child_book)孩子看的书籍
id child book
1 张三 《SQL Server》
2 张三 《Informix》
3 王五 《Access》

这样看上去很明显结果是
张家共有《SQL Server》,《MYSQL》,《Oracle》,《Informix》4本书
李家共有 《Oracle》,《Sybase》两本书
王家共有《Access》1本书

写了很久我的结果都是
张家 5本
李家 2本
王家 3本
我用左关联没有办法去让重复的book不累计,哎,郁闷很久
试试你能写出来吗?

---------------------------------------------------------------

你数据库中的表结构实际就是这样子的么?
---------------------------------------------------------------

SELECT COUNT(*),family from
(SELECT family,book FROM father_book f
LEFT JOIN family fa ON f.father =fa.father
union all
SELECT family,book FROM mather_book f
LEFT JOIN family fa ON f.mather =fa.mather
union all
SELECT family,book FROM child_book f
LEFT JOIN family fa ON f.child =fa.child) a GROUP by family;
---------------------------------------------------------------

不好意思,上面搞错了,以下面为准:

SELECT COUNT(*),family from
(SELECT family,book FROM father_book f
LEFT JOIN family fa ON f.father =fa.father
union
SELECT family,book FROM mather_book f
LEFT JOIN family fa ON f.mather =fa.mather
union
SELECT family,book FROM child_book f
LEFT JOIN family fa ON f.child =fa.child) a GROUP by family;
---------------------------------------------------------------

楼上的实现方法最简单明了!

Published At
Categories with 数据库类
comments powered by Disqus