根据FK获取字段

时间:2018-05-31 23:27:07

标签: 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  |
+---------+-------------+----------------+

现在,我需要收到用户的电子邮件,其中business_id表中的user字段与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

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

1 个答案:

答案 0 :(得分:0)

通过使用不同的别名将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