MySQL 别名查询以在另一个查询中使用
MySQL alias a query for use in another query
我的标题不是很好,但让我解释一下我的情况。我有一个 jobs
table。作业 table 有 2 个指向 users
table 的外键:sales_rep_id
和 account_manager_id
.
然后我有另一个名为 contact_info
的 table 与用户 table 一对一的关系。
jobs
-----
sales_rep_id
account_manager_id
...
users
-----
first_name
last_name
contact_info
-----
user_id
home_phone
如果我想查询每个工作的两个人的 phone 号码,我会执行以下操作:
SELECT reps.home_phone as reps_home, account_managers.home_phone as a_m_home FROM jobs
JOIN
(SELECT * FROM users
JOIN contact_info
ON users.id = contact_info.user_id) reps
ON reps.id = jobs.sales_rep_id
JOIN
(SELECT * FROM users
JOIN contact_info
ON users.id = contact_info.user_id) account_managers
ON account_managers.id = jobs.account_manager_id
我可以做些什么来使用连接的数据创建一个临时 table 吗?执行此连接的最有效方法是什么?例如,如果我在用户 table 的作业 table 中有 10 个外键,而我需要所有 10 个的 phone_number 怎么办?
这应该是获取您需要的所有信息
SELECT j.*
, u1.first_name as sales_rep_first_name
, u1.last_name as sales_reps_last_name
, u2.first_name as manager_first_name
, u2.u1.last_name as manager_last_name
, c1.home_phone as sales_rep_home_phone
, c2.home_phone as manager_home_phone
FROM jobs as j
INNER JOIN contact_info as c1 ON j.sales_rep_id = c1.user_id
INNER JOIN user u1 ON u1.id= c1.user_id
INNER JOIN contact_info as c2 ON j.saccount_manager_id = c2.user_id
INNER JOIN user u2 ON u2.id= c2.user_id;
定义连接 user
和 contact_info
的视图。
CREATE VIEW user_contact_info
SELECT u.id, u.first_name, u.last_name, c.home_phone
FROM user AS u
JOIN contact_info AS c ON u.id = c.user_id
然后你就可以像 table 一样使用它了。
SELECT reps.home_phone as reps_home, account_managers.home_phone as a_m_home
FROM jobs
JOIN user_contact_info AS reps ON reps.id = jobs.sales_rep_id
JOIN user_contact_info AS account_managers ON account_managers.id = jobs.account_manager_id
我的标题不是很好,但让我解释一下我的情况。我有一个 jobs
table。作业 table 有 2 个指向 users
table 的外键:sales_rep_id
和 account_manager_id
.
然后我有另一个名为 contact_info
的 table 与用户 table 一对一的关系。
jobs
-----
sales_rep_id
account_manager_id
...
users
-----
first_name
last_name
contact_info
-----
user_id
home_phone
如果我想查询每个工作的两个人的 phone 号码,我会执行以下操作:
SELECT reps.home_phone as reps_home, account_managers.home_phone as a_m_home FROM jobs
JOIN
(SELECT * FROM users
JOIN contact_info
ON users.id = contact_info.user_id) reps
ON reps.id = jobs.sales_rep_id
JOIN
(SELECT * FROM users
JOIN contact_info
ON users.id = contact_info.user_id) account_managers
ON account_managers.id = jobs.account_manager_id
我可以做些什么来使用连接的数据创建一个临时 table 吗?执行此连接的最有效方法是什么?例如,如果我在用户 table 的作业 table 中有 10 个外键,而我需要所有 10 个的 phone_number 怎么办?
这应该是获取您需要的所有信息
SELECT j.*
, u1.first_name as sales_rep_first_name
, u1.last_name as sales_reps_last_name
, u2.first_name as manager_first_name
, u2.u1.last_name as manager_last_name
, c1.home_phone as sales_rep_home_phone
, c2.home_phone as manager_home_phone
FROM jobs as j
INNER JOIN contact_info as c1 ON j.sales_rep_id = c1.user_id
INNER JOIN user u1 ON u1.id= c1.user_id
INNER JOIN contact_info as c2 ON j.saccount_manager_id = c2.user_id
INNER JOIN user u2 ON u2.id= c2.user_id;
定义连接 user
和 contact_info
的视图。
CREATE VIEW user_contact_info
SELECT u.id, u.first_name, u.last_name, c.home_phone
FROM user AS u
JOIN contact_info AS c ON u.id = c.user_id
然后你就可以像 table 一样使用它了。
SELECT reps.home_phone as reps_home, account_managers.home_phone as a_m_home
FROM jobs
JOIN user_contact_info AS reps ON reps.id = jobs.sales_rep_id
JOIN user_contact_info AS account_managers ON account_managers.id = jobs.account_manager_id