mysql - 根据 FK 获取字段

标签 mysql foreign-keys

我不太清楚如何表达我的问题,所以我为奇怪的标题道歉。我目前有两个 MySQL 表,业务表和用户表,分别如下所示:

+-------------+----------+
| business_id | owner_id |
|      1      |    1     |
|      2      |    3     |
+-------------+----------+

+---------+-------------+----------------+
| user_id | business_id |      email     |
|    1    |      1      |  a@domain.com  |
|    2    |      1      |  b@domain.com  |
|    3    |      2      |  c@domain.com  |
+---------+-------------+----------------+

现在,我需要获取用户的电子邮件,其中 user 表中的 business_id 字段与 owner_id 中的字段匹配business 表,我将始终拥有 user_id(但不一定是所有者)。为了证明我的意思,我可以通过这段乱七八糟的代码来实现我想要的:

SELECT
    `email`
FROM
    `user`
WHERE
    `user_id` =(
    SELECT
        `owner_id`
    FROM
        `business`
    WHERE
        `business_id` =(
        SELECT
            `business_id`
        FROM
            `user`
        WHERE
            `user_id` = :user_id
    )
)

因此,如果我为 user_id 参数传递 1 或 2 的值,它将返回 a@domain.com,如果我传递的值为3 它将返回 c@domain.com

我只是觉得有更好的方法!

最佳答案

在子查询之外,您可以使用联接通过使用不同的别名两次联接 user 表来获得相同的结果:

select u2.email
from user u1
inner join business b on u1.business_id=b.business_id
inner join user u2 on b.owner_id=u2.user_id
where u1.user_id=...

DEMO

关于mysql - 根据 FK 获取字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50634157/

相关文章:

php - 为什么我的推进级联被外键约束阻止?

mysql - 复合主键之一作为外键 Mysql

mysql - 无法向 mySQL 表添加外键

mysql - SQL查询: Single row has multiple foreign keys from another table

按依赖顺序排序的 MySQL 表名

javascript - 如何将 JSON 数组插入数据库

python - KeyError : u"Migration rango. 0002_auto_20150905_0345 依赖引用不存在的父节点

java - 使用 CrudRepository 将 ZonedDateTime 转换为 MySQL 时间戳

php - mysql_last_id() 的竞争条件

mysql - 按字段中最常见的单词对 MySQL 查询进行排序