我不太清楚如何表达我的问题,所以我为奇怪的标题道歉。我目前有两个 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=...
关于mysql - 根据 FK 获取字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50634157/