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子句中使用过滤器会导致您的查询行为类似于您不想要的内部联接。