【问题标题】:Select 3 tables with count and join选择 3 个带有计数和连接的表
【发布时间】:2013-03-07 14:50:32
【问题描述】:

我有 3 个表 tb1、users、users_credits。 我的目标是将两个选择(sel1,sel2)组合成一个视图,然后 在没有行的 sel2 中显示 0(左连接?)

sel1

SELECT 
users.userid, 
users.datareg,
users_credits.credits,
FROM 
users,
users_credits,
WHERE
users.userid = users_credits.userid

Sel2

SELECT COUNT(*) FROM tb1 where tb1.id_user = users.userid

表结构

tb1
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_user` decimal(11,0) NOT NULL,
`datains` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)

用户

`userid` int(4) unsigned NOT NULL AUTO_INCREMENT,
`datareg` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 PRIMARY KEY (`userid`)

users_credits

`id` int(11) NOT NULL AUTO_INCREMENT,
`userid` int(11) NOT NULL,
`credits` decimal(5,0) NOT NULL,
`data` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)

最好的方法是什么? 谢谢。

【问题讨论】:

    标签: mysql sql select join


    【解决方案1】:
    SELECT  users.userid, 
            users.datareg,
            users_credits.credits,
            COALESCE(c.totalCount,0) totalCount
    FROM    users
            LEFT JOIN users_credits
                ON users.userid = users_credits.userid
            LEFT JOIN
            (
                SELECT  id_user, COUNT(*) totalCount 
                FROM    tb1 
                GROUP   BY id_user
            ) c ON c.id_user = users.userid
    

    如需进一步了解联接,请访问以下链接:

    更新 1

    SELECT  users.userid, 
            users.datareg,
            users_credits.credits,
            COALESCE(c.totalCount,0) totalCount,
            c.max_datains
    FROM    users
            LEFT JOIN users_credits
                ON users.userid = users_credits.userid
            LEFT JOIN
            (
                SELECT  id_user, MAX(datains) max_datains, COUNT(*) totalCount 
                FROM    tb1 
                GROUP   BY id_user
            ) c ON c.id_user = users.userid
    

    更新 2

    您需要为此创建两个视图:

    第一个视图:

    CREATE VIEW tbl1View
    AS
    SELECT  id_user, MAX(datains) max_datains, COUNT(*) totalCount 
    FROM    tb1 
    GROUP   BY id_user
    

    第二视图

    CREATE VIEW FullView
    AS
    SELECT  users.userid, 
            users.datareg,
            users_credits.credits,
            COALESCE(c.totalCount,0) totalCount,
            c.max_datains
    FROM    users
            LEFT JOIN users_credits
                ON users.userid = users_credits.userid
            LEFT JOIN tbl1View c ON c.id_user = users.userid
    

    【讨论】:

    • 我收到错误MySQL server version for the right syntax to use near 'where c.id_user = users.userid LIMIT 0, 30' at line 13
    • 由于复制粘贴造成的拼写错误,请再试一次。
    • 完美! ..只有一件事:如果我还想要最后一个 tb1.datains 输入返回行的位置?非常感谢!
    • 你是我的英雄! :D 非常感谢!!
    • Ops...当我尝试使用您选择创建视图时,我收到 视图的 SELECT 在 FROM 子句中包含子查询 :(
    猜你喜欢
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    相关资源
    最近更新 更多