按家庭收藏书籍的多少统计查询
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;
---------------------------------------------------------------
楼上的实现方法最简单明了!