我有一个主表需要保存对其他表的引用 表用户有一个ID,另一个表有REF_ID。
Table users
===========
ID TABLE_ID REF_ID NAME
============================
1 1 1 John
2 2 20 Stacey
. . . .
. . . .
n 2 324 Ben
Table Posts(1)
===========
ID TITLE
===========
1 "hey there!"
2 "what's up?"
. .
. .
n "Look what I found!"
Table Comments(2)
===========
ID CONTENT
===========
1 "yes, looks amazing"
2 "Wow!"
. .
. .
n "yep"
主表包含很长的用户列表。每个都有帖子或评论。 我的问题是我如何与他们合作?
要插入:我想我应该提交2个不同的查询来插入,首先是插入到相关的帖子/评论表,获取lastInsertId
,然后将该ID提供给主要的refs表,正确的吗?
如何在一个查询中仅使用主表(用户)ID' ,获取相关信息以及我从哪个表中获取相关信息,例如:
ID REF_ID NAME TITLE
1 1 John "hey there!"
答案 0 :(得分:2)
首先你有一个糟糕的设计,要解决它现在你必须这样做:
SELECT u.ID, u.REF_ID, u.NAME, p.TITLE
FROM users u
JOIN posts p
ON u.ref_id = p.ID
WHERE u.TABLE_ID = 1
UNION ALL
SELECT u.ID, u.REF_ID, u.NAME, c.CONTENT
FROM users u
JOIN comments c
ON u.ref_id = c.ID
WHERE u.TABLE_ID = 2
更好的设计应该在同一张桌子上加入帖子和评论
表用户
ID REF_ID NAME
表格
REF_ID TYPE_ID TITLE
这样您的REF_ID
就是唯一的。在您的版本中,您可以使用Ref_id = 1,它可以在表格Post或表格注释中。
Type_id可以是1或2,具体取决于帖子或评论。如果需要,还允许您稍后添加其他类型。在之前的模型中,您需要添加一个新表。
最后,查询变得更容易:
SELECT u.ID, u.REF_ID, u.NAME, p.TITLE
FROM users u
JOIN posts p
ON u.ref_id = p.ID
-- WHERE u.TYPE_ID = 1 // optional
答案 1 :(得分:0)
1-我不明白这个问题,对不起。
2-这是联接的原则:
SELECT u.ID, u.REF_ID, u.Name, p.Title
FROM users u
INNER JOIN posts p ON p.ID = u.REF_ID
答案 2 :(得分:0)
访问https://docs.microsoft.com/en-us/sql/relational-databases/tables/primary-and-foreign-key-constraints
你必须制作" ID"作为主要和" REF_ID"作为外键。 主表的外键将是其他两个表的主键。 很简单,你必须在这些表之间建立关系。
访问https://www.tutorialspoint.com/sql/pdf/sql-foreign-key.pdf 关于表关系的更多信息。