删除未经伪造的记录

时间:2017-07-14 05:09:09

标签: mysql

我有两张桌子

CREATE TABLE `server` (
    `server_id` int(3) NOT NULL AUTO_INCREMENT,
    `server_name` varchar(15),
    `server_alias` varchar(50),
    `server_status` tinyint(1) DEFAULT '0',
    `server_join` tinyint(1) DEFAULT '1',
    `server_number_member` int(5),
    PRIMARY KEY (`server_id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE `member` (
    `member_id` int(11) NOT NULL AUTO_INCREMENT,
    `member_server` int(3) DEFAULT NULL COMMENT 'Id server',
    `member_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Tên của member',
    PRIMARY KEY (`member_id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

我创建表VIEW以获取列表服务器

CREATE VIEW `server_client` AS 
SELECT
    `s`.`server_id`            AS `server_id`,
    `s`.`server_name`          AS `server_name`,
    `s`.`server_alias`         AS `server_alias`,
    IF (`s`.`server_join` = 1, (COUNT(`m`.`member_id`) / `s`.`server_number_member` * 100) DIV 1, 100) AS `server_full`  
FROM (`server` `s`
    LEFT JOIN `member` `m`
        ON ((`m`.`member_server` = `s`.`server_id`)))
WHERE `s`.`server_status` = 1

现在,server表有1条记录:

-------------------------------------------------------------------------------------------
|server_id|server_name|server_alias         |server_status|server_join|server_number_member|
|-----------------------------------------------------------------------------------------|
|       1 | SV 01     | http://example.com/ |           0 |         0 |                 10 |
-------------------------------------------------------------------------------------------

member

------------------------------------------
| member_id | member_server | member_name|
|----------------------------------------|
|         1 |             1 | aaa        |
|----------------------------------------|
|         2 |             1 | bbb        |
|----------------------------------------|
|         3 |             1 | ccc        |
------------------------------------------

server_client

中的结果
--------------------------------------------------------
| server_id | server_name | server_alias | server_full |
|------------------------------------------------------|
| NULL      | NULL        | NULL         |         100 |
--------------------------------------------------------

server_full用于计算服务器中已有成员数的百分比

我想在server_client表中删除记录NULL 怎么做

感谢

1 个答案:

答案 0 :(得分:1)

因为您使用的是COUNT(),所以您还应该使用GROUP BY聚合服务器。以下查询应该与您想要的一致:

CREATE VIEW server_client AS 
SELECT
    s.server_id AS server_id,
    s.server_name AS server_name,
    s.server_alias AS server_alias,
    IF (s.server_join = 1,
        (COUNT(m.member_id) / s.server_number_member * 100) DIV 1,
        100) AS server_full
FROM server s
LEFT JOIN member m
    ON m.member_server = s.server_id
WHERE s.server_status = 1
GROUP BY
    s.server_id,
    s.server_name,
    s.server_alias

您可能遇到的唯一问题是我在查询中使用的条件聚合。在任何情况下,我都希望上述结果至少看起来是正确的。

顺便说一下,我删除了所有的反引号,因为你没有它们,而且它们很难看。