mysql - MySQL中如何让多个表共享id列

标签 mysql sql database select

这个问题以前有人问过,但从来没有真正回答过(至少我想这样做)。我的数据库中有三个表,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

关于mysql - MySQL中如何让多个表共享id列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8474022/

相关文章:

php - 在开发、暂存和生产之间同步 Drupal 站点

php - 如果 PDO 事务失败,如何重定向到一个页面?

c# 字符串日期格式从 d.M.yyyy 到 yyyy-MM-dd

php - MySQL 更新命令出错。 (在 PHP 中)

sql - 将同一个表中的 2 个主键列连接到 1 个外键列

mysql - 优化 update sql 语句,包含 2 个内部选择

mysql - 在mysql中模拟正则表达式捕获组

php - 如何正确使用sql命令mid或substring?

java - 如何验证下拉列表并将其保存在数据库中,并且代码不显示错误

sql - 为什么有人稍后会在 Oracle 中使用 NoValidate 启用约束