Получить поле на основе FK - PullRequest
0 голосов
/ 01 июня 2018

Я не совсем знал, как сформулировать свою проблему, поэтому я прошу прощения за странный заголовок.В настоящее время у меня есть две таблицы 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
    )
)

Так что, если бы я передал значение 1 или 2 для параметра user_id, он быreturn a@domain.com и если бы я передал значение 3, это вернуло бы c@domain.com.

Я просто чувствую, что думал, что есть лучший способ!

1 Ответ

0 голосов
/ 01 июня 2018

В подзапросах вы можете использовать объединения для достижения того же результата, дважды объединяя таблицу 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...