[英]How to make multiple tables share the id column in MySQL
之前曾有人问过这个问题,但从未真正回答过(至少我想这样做)。 我的数据库中有三个表, threads
, responses
和votes
。 我需要他们仅共享id
字段。 所以我可以做类似的事情
SELECT * FROM threads AS t JOIN responses AS r JOIN votes AS v
WHERE id = 15
并且只会检索ID为15的响应或(唯一)投票记录的线程。
有没有可能在不创建额外表的情况下执行此操作的方法? 我不是在问这是否是个好主意(可能不是),但是否有可能以及如何做。
如果我理解正确,那么您想获取线程,响应或以id = 5进行投票。在MySQL中没有机会在表之间提供id字段唯一性(即,防止创建响应并以相同的id值进行投票),但是您可以在您的应用中做到这一点。
您可以通过以下方式获取所需的行:
SELECT id, name, 'thread' AS `type` FROM threads WHERE id=5
UNION
SELECT id, name, 'response' AS `type` FROM responses WHERE id=5
UNION
SELECT id, name, 'vote' AS `type` FROM votes WHERE id=5
您的选择将引发错误,因为where子句中的id
字段不明确。 我想所有这三个表中都有一个id
字段。
SELECT * FROM threads AS t JOIN responses AS r JOIN votes AS v
WHERE id = 15
因此,即使id
字段在这些字段之间“以某种方式共享”,您也必须使where子句明确:
SELECT * FROM threads AS t JOIN responses AS r JOIN votes AS v
WHERE t.id = 15
此外,我假设线程和响应具有多对一关系,这意味着可以有多个响应对应一个线程。 这意味着responses
表将具有一个thread_id
字段。 responses
表中的id
字段不能具有与相应thread
记录中的id
字段相同的值,因为id
字段在两个表中都必须是唯一的。
responses
和votes
之间的关系采用相同的逻辑(单个响应将具有很多投票)。
因此, 我得出结论,无法在这三个表之间共享id
字段 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.