微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MS ACCESS - 从没有表 1 id 重复项的 3 个表中检索行

如何解决MS ACCESS - 从没有表 1 id 重复项的 3 个表中检索行

我一直在开发一个电子商务网站。

我想实现一项新功能,将产品与多个类别相关联。

谷歌搜索最好的数据库模式来实现这一点,我想出了 3 个表:

Table products
-----------------------------------------------------
id  | prod_name |    SEO    | promo_init | promo_end
-----------------------------------------------------
1   | Product 1 | product-1 | 2021/07/01 | 2021/07/31
2   | Product 2 | product-2 | 2021/07/01 | 2021/07/31
3   | Product 3 | product-3 | 2021/07/01 | 2021/07/31
4   | Product 4 | product-4 | 2021/08/01 | 2021/08/31

Table categories
---------------------------------------
id  |  cat_name  | SEO
---------------------------------------
1   | Category 1 | category-1
2   | Category 2 | category-2
3   | Category 3 | category-3

Table product_categories
---------------------------------------
id  | idprod | idcat
---------------------------------------
1   |    1   |   1
2   |    1   |   2
3   |    2   |   1
4   |    2   |   3
5   |    3   |   2
6   |    3   |   3

当然这些表有很多很多记录。

我需要的是显示促销中的产品,即插入表格中的最后 3 个产品。

到目前为止我有

select top 3 * from ((products PRODS
left join product_categories PC on PRODS.id=PC.idprod)
left join categories CATS on CATS.id=PC.idcat)
where PRODS.promo_init<=Date() and PRODS.promo_end>=Date()
order by PRODS.id desc

但此代码返回重复的产品:

PRODS.id | prod_name | PRODS.SEO | promo_init | promo_end  | PC.id | idprod | idcat | CATS.id |  cat_name  | CATS.SEO
3        | Product 3 | product-3 | 01/07/2021 | 31/07/2021 |   6   |    3   |   3   |   3     | Category 3 | category-3
3        | Product 3 | product-3 | 01/07/2021 | 31/07/2021 |   5   |    3   |   2   |   2     | Category 2 | category-2
2        | Product 2 | product-2 | 01/07/2021 | 31/07/2021 |   4   |    2   |   3   |   3     | Category 3 | category-3
2        | Product 2 | product-2 | 01/07/2021 | 31/07/2021 |   3   |    2   |   1   |   1     | Category 1 | category-1

我需要检索促销中的最后 3 个(不同)产品,我需要产品表中的所有字段和类别表中的所有字段。

正确的 sql 查询应该返回 ID 为 3,2 和 1 的产品。

有没有办法做到这一点?

感谢所有帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。