gpt4 book ai didi

mysql - 如果左连接表不为空则为空结果集,否则为空

转载 作者:行者123 更新时间:2023-11-29 02:41:03 26 4
gpt4 key购买 nike

我在我的 sql 查询中得到了一些意想不到的结果。如果我加入的表有记录,当我应该在每一行上得到一个空的结果集时,我得到一个空的结果集,我不知道为什么会这样?

当昨天的数据仍在表中时,我得到一个空结果集。如果我清空表并运行相同的查询,我会得到预期的结果集:

cnt | partner | today
0 | 3000 | NULL
0 | 3001 | NULL
0 | 3002 | NULL
0 | 3003 | NULL
0 | 3004 | NULL
0 | 3005 | NULL
0 | 3006 | NULL
0 | 3007 | NULL

我做错了什么?

CREATE TABLE `partner` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'unik räknare' ,
`url` TEXT NOT NULL COMMENT 'webadress' ,
`imgurl` TEXT NOT NULL COMMENT 'bildurl' ,
`displayname` VARCHAR(256) NOT NULL COMMENT 'firmanamn' ,
`annons` TEXT NULL COMMENT 'annons ord' ,
PRIMARY KEY (`id`)
) ENGINE = MyISAM CHARSET=utf8 COLLATE utf8_swedish_ci AUTO_INCREMENT=3000 COMMENT = 'Tabell innehållande samarbetspartners (saps)';

CREATE TABLE `sap_daily_stats` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'unik räknare' ,
`partner` INT UNSIGNED NOT NULL COMMENT 'partner.id' ,
`servertime` INT UNSIGNED NOT NULL COMMENT 'datum' ,
`browser` VARCHAR(256) NOT NULL COMMENT 'HTTP_USER_AGENT' ,
`remoteaddr` VARCHAR(40) NOT NULL COMMENT 'REMOTE_ADDR' ,
`httpacclang` VARCHAR(72) NULL COMMENT 'HTTP_ACCEPT_LANGUAGE' ,
PRIMARY KEY (`id`)
) ENGINE = MyISAM CHARSET=utf8 COLLATE utf8_swedish_ci AUTO_INCREMENT=10000 COMMENT = 'Tabell innehållande dagens annonsstatistik';


SELECT
COUNT(`q`.`partner`) - (
CASE WHEN DATE_FORMAT(FROM_UNIXTIME(`d`.`servertime`),'%Y-%m-%d') IS NULL THEN 1
ELSE 0
END) AS `cnt`,
`q`.`partner`,
DATE_FORMAT(FROM_UNIXTIME(`d`.`servertime`),'%Y-%m-%d') AS `today`
FROM `sap_quotas` `q`
LEFT JOIN `sap_daily_stats` `d`
ON `q`.`partner` = `d`.`partner`
GROUP BY `q`.`partner`,`today`
HAVING `today` = CURDATE() OR `today` IS NULL
ORDER BY `today` IS NULL DESC,
`cnt` ASC,
`q`.`partner` ASC

不知道是否与版本有关,但这是我当前的设置:

数据库服务器

Server: MySQL (127.0.0.1 via TCP/IP)
Server type: MySQL
Server version: 5.7.21 - MySQL Community Server (GPL)
Protocol version: 10
Server charset: UTF-8 Unicode (utf8)

网络服务器

Apache/2.4.33 (Win32) PHP/7.2.4
Database client version: libmysql - mysqlnd 5.0.12-dev - 20150407
PHP extension: mysqliDocumentation curlDocumentation mbstringDocumentation
PHP version: 7.2.4

最佳答案

如果您有昨天的数据(根据 OP)——那么 LEFT JOIN 将不会创建 today 列为空的行。
获取 null 的一种方法是在 JOIN 条件(如下所示)而不是在 HAVING 条件中进行筛选。

LEFT JOIN `sap_daily_stats` `d`
ON `q`.`partner` = `d`.`partner`
and DATE_FORMAT(FROM_UNIXTIME(`d`.`servertime`),'%Y-%m-%d') = CURDATE()

关于mysql - 如果左连接表不为空则为空结果集,否则为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51854949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com