繁体   English   中英

如何使多个表共享MySQL中的id列

[英]How to make multiple tables share the id column in MySQL

之前曾有人问过这个问题,但从未真正回答过(至少我想这样做)。 我的数据库中有三个表, threadsresponsesvotes 我需要他们仅共享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字段在两个表中都必须是唯一的。

responsesvotes之间的关系采用相同的逻辑(单个响应将具有很多投票)。

因此, 我得出结论,无法在这三个表之间共享id字段

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM