Mysql 为什么我的左联接不工作,显示零?

Mysql 为什么我的左联接不工作,显示零?,mysql,Mysql,我试图让作者在日期内为零,但我只得到那些售出的 SELECT v.author_name, COUNT(*) FROM bookssold s LEFT JOIN authors v ON s.author_id = v.author_id WHERE s.price = 19 AND DATE(s.purchase_date) BETWEEN '2009-01-20' AND DATE(NOW()) GROUP BY s.author_id 这应该是根据其他职位的工作 v是具有id和名称的a

我试图让作者在日期内为零,但我只得到那些售出的

SELECT v.author_name, COUNT(*)
FROM bookssold s
LEFT JOIN authors v ON s.author_id = v.author_id
WHERE s.price = 19
AND DATE(s.purchase_date) BETWEEN '2009-01-20' AND DATE(NOW())
GROUP BY s.author_id
这应该是根据其他职位的工作

v是具有id和名称的authors表


s是书的作者id、价格和购买日期。

你的问题有点不清楚,但这里是

如果
ss
是销售记录,而
vd
是作者姓名/id,并且您想要一个包含每个作者的列表,而不管他是否有销售,如果有销售,那么您就打开了
左连接的表。相反,你想要

...
FROM vd
LEFT JOIN ss ON ss.id = vd.id
...
或者,您可以将它们保持在现有的顺序,并使用
右连接
,但我认为
左连接
更有意义

如果您想让结果显示零而不是
NULL
,则必须使用
大小写
或其他内容,但这是一个单独的问题

我建议尝试以下方法:

SELECT v.author_name, COUNT(*)
FROM authors v
LEFT JOIN bookssold s 
    ON s.author_id = v.author_id
    AND s.price = 19
    AND DATE(s.purchase_date) BETWEEN '2009-01-20' AND CURDATE()
GROUP BY v.author_id;

我试图让作者在日期内为零这意味着什么?请也发布您的模式。从
ss
s
的别名很好。这将节省时间:)lol none是我的表名。必须留下一些可读的东西。表vd包含所有作者。我要的是那些没有卖过任何有版权的书的作者zeros@Dev-莉亚,你说卖零的书是什么意思?你指的是哪个领域?根据您的问题,在
已售出图书
表中只有三个字段。我不理解在
id
price
purchase date
中查找0的原因。这就是我试图做的,但即使我切换了表,我仍然只能找到卖书的作者。我没有得到任何零。有50位作者,只有20本solds书籍。我只拿回20英镑。我仍然缺少其他30个连接。@Dev Ria当您反转连接顺序时,是否将WHERE筛选器移到了连接而不是WHERE?如果您使用的是
LEFT JOIN bookssell
则在
条件后,您将添加
和s.price=19以及介于'2009-01-20'和日期(现在())之间的日期(s.purchase_DATE)
,并删除WHERE。然后将选择更改为
COUNT(s.purchase_DATE)
或其他内容,您将获得售出的数字,或者
0
如果没有(我想;我现在没有办法测试)。@iamnotmaynard我用一个我认为应该有效的示例查询编辑了您的答案。@Dev Ria查看对该答案的编辑,在WHERE子句中使用过滤器会导致您的查询行为类似于您不想要的内部联接。