gpt4 book ai didi

不带 WHERE 子句的 MySQL LEFT JOIN 不返回空行

转载 作者:行者123 更新时间:2023-11-29 14:15:18 24 4
gpt4 key购买 nike

编辑:这是我的表格:

CREATE TABLE IF NOT EXISTS `punch` (
`name` varchar(50) NOT NULL,
`date` varchar(50) NOT NULL,
`duration` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO `punch` (`name`, `date`, `duration`) VALUES
('foo', '1', 2),
('bar', '1', 3),
('bar', '2', 5),
('foo', '3', 6),
('foo', '4', 8),
('bar', '4', 9);

我有一个包含以下值的表格:

SELECT * FROM `punch` P1 WHERE P1.date BETWEEN 1 AND 3 ORDER BY P1.name , date;

结果:

name    date    duration
bar 1 3
bar 2 5
foo 1 2
foo 3 6

我想制作日期 1 到 3 的报告,如下所示:

name    date    duration
bar 1 3
bar 2 5
bar 3 null
foo 1 2
foo 2 null
foo 3 6

我尝试了这个查询(注意注释的 WHERE):

SELECT * FROM (
SELECT DISTINCT date FROM punch WHERE date BETWEEN 1 AND 3
) P1
LEFT JOIN (
SELECT * FROM punch -- WHERE name = 'bar'
) P2 ON P1.date=P2.date

ORDER BY P2.name, P1.date

我得到结果:

date    name    date    duration
1 bar 1 3
2 bar 2 5
1 foo 1 2
3 foo 3 6

我期待这样的事情:

date    name    date    duration
2 NULL NULL NULL
3 NULL NULL NULL
1 bar 1 3
2 bar 2 5
1 foo 1 2
3 foo 3 6

现在,当我删除注释的 WHERE 时,我得到了结果:

date    name    date    duration
3 NULL NULL NULL
1 bar 1 3
2 bar 2 5

我的问题是,为什么上面的 LEFT JOIN 在没有 WHERE 子句时表现得像 INNER JOIN?

上面我的预期报告的正确查询是什么?

谢谢

最佳答案

嗨,这样的东西会起作用:)

 SELECT DISTINCT 
P1.name,
P2.date,
(SELECT PP.duration
FROM punch PP
WHERE P1.name = PP.name
AND P2.date = PP.date ) AS duration
FROM
(SELECT DISTINCT name FROM `punch`) P1,
(SELECT DISTINCT date FROM punch)P2
WHERE P2.date BETWEEN 1 AND 3
ORDER BY P1.name , P2.date

结果:

NAME    DATE    DURATION
bar 1 3
bar 2 5
bar 3 (null)
foo 1 2
foo 2 (null)
foo 3 6

<强> SQLFIDDLE example

关于不带 WHERE 子句的 MySQL LEFT JOIN 不返回空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12794392/

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