如何在 sqlite3 中正确连接这些表 [关闭]
Posted
技术标签:
【中文标题】如何在 sqlite3 中正确连接这些表 [关闭]【英文标题】:how to join these tables properly in sqlite3 [closed] 【发布时间】:2021-07-19 14:24:12 【问题描述】:我有 3 张桌子。首先是 Posts 表,看起来像这样
id | post_creator |
---|---|
1 | Mark |
2 | John |
3 | David |
4 | Ellie |
5 | Thomas |
6 | Elliot |
有两种类型的帖子。图片帖子和文字帖子。我为他们准备了 2 张不同的桌子。下面是 text_posts 表的样子:
post_id | post_text |
---|---|
1 | lorem ipsum |
4 | lorem ipsum |
5 | lorem ipsum |
还有一个 image_posts 表,它们都遵循 post 表中的 id
post_id | post_text | post_image |
---|---|---|
2 | lorem ipsum | image_url |
3 | lorem ipsum | image_url |
6 | lorem ipsum | image_url |
现在我不关心 post_image url,我想要的只是从 Post 表中获取 post_creator 以及 post,无论它是在 text_post 表还是 image_post 表中,我想要文本。我该怎么做?
【问题讨论】:
或许你可以从UNION语句中获得灵感,它可以将两个查询合并为一个。 【参考方案1】:我假设您使用的是 SQL Db。
在这种情况下,Posts 和 post_text/image_posts 是 NtoN 关系,因此您应该将关系规范化为 2 1toN。 在这种情况下,它以 1 个表 Post、2 个表:Post_text 和 Post_img 以及另一个维护每个用户的帖子“历史记录”的表结束。 您应该创建另一个名为 Creates(id, user_id, post_id) 的表。
然后就可以加入2表,获取post_creator了。
SELECT
post_id, post_text, post_image
FROM Posts
LEFT JOIN text_posts ON text_posts.post_id = Posts.id
LEFT JOIN image_posts ON image_posts.post_id = Posts.id
然后您将获得一个表格,其中包含表格的所有字段作为结果。要了解帖子是否为图像,只需检查 post_image 字段。如果它是 != null 那么它将是一个 image_post。
但是,您使用的结构非常糟糕,我建议您更好地研究如何构建 SQL 表和 Db,并尝试按照规范化规则以更好的方式重新构建您的数据。
【讨论】:
到目前为止我只做前端的东西,对 db 很陌生,所以我还不明白这是如何工作的,非常感谢您的建议。以上是关于如何在 sqlite3 中正确连接这些表 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Sequelize.js ORM 正确迁移 sqlite3 数据库?