如何在 MySQL 中使用外键进行查询?

Posted

技术标签:

【中文标题】如何在 MySQL 中使用外键进行查询?【英文标题】:How can I query using a foreign key in MySQL? 【发布时间】:2012-09-11 01:51:04 【问题描述】:

现在我有一个包含两个表的小型数据库,看起来像这样:

    users table
    ====================
    id  name   status_id
    1   Bobby  3
    2   James  2

    statuses table
    =============
    id  value
    1   Waiting
    2   Approved
    3   Other

status_id 设置为状态表中 id 的外键约束。我的查询看起来像这样:

SELECT *
FROM `users`
WHERE `status_id` = 2";

当我显示$row['status_id'] 时,它会输出2,但我希望它显示为Approved,最好的方法是什么?

【问题讨论】:

***.com/questions/260441/….... 但是外键只在 InnoDB 上支持,你不能在 MyIsam 中做这样的事情。 @MiroMarkarian 关系设置正确,它是 InnoDB,我只是不明白如何正确使用JOIN,但它在下面得到了回答。 【参考方案1】:
SELECT u.*, s.*
FROM users u
    inner join statuses s on u.status_id = s.id
WHERE u.status_id = 2

【讨论】:

+1 用于回答问题和使用符合 ANSI 的 JOIN 语法。 我尝试使用它作为我的查询,但是当我回显$row['status_id'] 它仍然输出2 @Riboflavin 那是因为你要status_id,看我的回答。如果这确实是状态表中列的名称,则需要询问“值”。 @thatidiotguy 啊,当然,这很好用,谢谢!对不起,我的菜鸟,我是外键的新手。【参考方案2】:

你需要的是这个

SELECT *
FROM `users`
JOIN statuses ON statuses.id = users.status_id
WHERE `status_id` = 2";

然后你可以参考

$row['value'];

【讨论】:

【参考方案3】:

最简单的方法是通过连接:

select *
from User u join Status s on u.status_id = s.id;

(如果您根本不需要 status-id,您可以在 select-clause 中指定您想要的列。)

【讨论】:

【参考方案4】:

您的用户表中没有已批准的值。它在您的状态表中。当您请求 status_id 时,您将从该查询中获取该值。我认为你必须做一个JOIN ON status_id 才能完成这项工作。或者进行第二次查询。

【讨论】:

【参考方案5】:

你不是JOIN在这里:

SELECT *
FROM Users U, Statuses S
WHERE S.id=U.status_ID
AND status_id = 2;

【讨论】:

以上是关于如何在 MySQL 中使用外键进行查询?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL中如何在关联表中查询出其中一个外键不存在的数据?

如何使用具有外键的模型进行 Q 查询?

sql如何在创建表时设置外键

在 Apache Cassandra 中实现 Mysql 或 Psql 关系表(外键约束)功能

mysql外键插入

如何在 MySQL 和 phpMyAdmin 的两个不同数据库中定义外键