如何在 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 中使用外键进行查询?的主要内容,如果未能解决你的问题,请参考以下文章