未从SQLITE查询中获得预期结果

kse8i1jr  于 2023-02-23  发布在  SQLite
关注(0)|答案(1)|浏览(157)

我很难用SQLITE从带有WHERE子句的LEFT JOIN返回正确的结果。我有两个表-内容和操作。
我希望返回内容创建日期介于日期A和日期B之间的所有操作。但是,当我添加WHERE子句时,我只获取每个内容项的第一个操作。当我删除WHERE子句时,我将按预期获取所有操作。
以下是表格的简化示例:
内容:
| 内容标识符|创建日期|内容|
| - ------|- ------|- ------|
| 1个|2023年1月2日|A类|
| 第二章|二〇二二年十二月十一日|乙|
| 三个|二〇二二年十二月三十一日|C级|
| 四个|2023年1月7日|D级|
| 五个|2023年1月22日|E级|
行动:
| 操作标识|行动|内容标识符|
| - ------|- ------|- ------|
| 1个|点击|第二章|
| 第二章|点击|1个|
| 三个|发送|1个|
| 四个|发送|1个|
| 五个|点击|三个|
| 六个|发送|四个|
| 七|发送|四个|
| 八个|点击|三个|
| 九|点击|五个|
当我运行以下查询时:

SELECT 
c.content_id,
c.creation_date,
c.content,
a.action_id
a.action
FROM content c
LEFT JOIN actions a ON a.content_id = c.content_id
WHERE c.creation_date BETWEEN '2023-01-01' AND '2023-01-30'
GROUP BY a.action_id

我希望看到这样的结果:
| 内容标识符|创建日期|内容。|操作标识|作用|
| - ------|- ------|- ------|- ------|- ------|
| 1个|2023年1月2日|A类|第二章|点击|
| 1个|2023年1月2日|A类|三个|发送|
| 1个|2023年1月2日|A类|四个|发送|
| 四个|2023年1月7日|D级|六个|发送|
| 四个|2023年1月7日|D级|七|发送|
| 五个|2023年1月22日|E级|九|点击|
我得到的结果是创建日期在该范围内的每个内容的第一个操作,而不是与在该范围内创建的内容关联的每个操作。

r8xiu3jd

r8xiu3jd1#

对于这个示例数据,您需要的只是一个没有任何聚合的INNER连接:

SELECT c.content_id, c.creation_date, c.content,
       a.action_id, a.action
FROM content c INNER JOIN actions a 
ON a.content_id = c.content_id
WHERE c.creation_date BETWEEN '2023-01-01' AND '2023-01-30';

请参见demo

相关问题