我目前有3个名为报告,用户和客户的表
报告分别有5个字段:
report_id INT,
user_id INT (FK to users on user_id)
client_id INT (FK to clients on client_id)
create_date DATE
description TEXT
用户分别有4个字段
user_id INT
username VARCHAR
password VARCHAR
parent_id INT (FK to users on user_id)
客户分别有3个字段
client_id INT
firstname VARCHAR
lastname VARCHAR
如您所见,允许用户拥有父用户(某种管理员)。 我想获取父用户和普通用户创建的所有报告并显示它们。 我已经想出了一个查询来做到这一点,但它非常庞大。
例如:获取ID为4的父用户的所有报告及其所有儿童报告。
(SELECT c.firstname, c.lastname, r.report_id, r.date, u.name
FROM clients c, reports r, users u
WHERE u.users_id=4
AND r.user_id = u.users_id
AND c.client_id = r.client_id)
UNION
(SELECT c.firstname, c.lastname, r.report_id, r.date, u.name
FROM clients c, reports r, users u
WHERE u.parent_id=4
AND r.user_id = u.users_id
AND c.client_id = r.client_id);
有没有办法简化此查询? 我很幸运能搞清楚。
提前致谢;
答案 0 :(得分:2)
您可以使用 OR ,因为2个查询几乎完全相同
SELECT *
FROM clients c, reports r, users u
WHERE r.user_id = u.users_id
AND c.client_id = r.client_id
AND (u.users_id=4 OR u.parent_id=4)
答案 1 :(得分:1)
怎么样:
SELECT firstname, lastname, report_id, date, name
FROM clients NATURAL JOIN reports NATURAL JOIN users
WHERE users_id=4 OR parent_id=4
答案 2 :(得分:0)
有没有人听说过加入?
SELECT
firstname, lastname, report_id, date, name
FROM
clients
JOIN reports USING (client_id)
JOIN users USING (report_id)
WHERE
user_id = ?
OR parent_id = ?