我花了很多时间将我的查询合并为一个。我有3个数据库表。这是示例模式。
我只有会话的用户名。我需要从用户公司获取数据库中的所有票据。
实施例:
用户A在B公司工作。
公司B有很多工人。工人创造门票。
用户A登录后查看您公司的所有门票。
我现在用2个查询完成了这个:
- 使用公司ID
- 获取用户在特定公司工作的门票。
答案 0 :(得分:4)
这应该这样做:
SELECT *
FROM User u1
INNER JOIN User u2 on u2.id_company = u1.id_company
INNER JOIN Ticket t on t.id_author = u2.id_user
WHERE u1.Name = @SessionUser
答案 1 :(得分:1)
这是你在找什么?
select t.*
from users u join
tickets t
on u.id_user = t.id_author
where u.company_id = (select u2.company_id from users u2 where u2.id_user = 'UserA');
答案 2 :(得分:1)
连接通常比子查询更快,但是很多DBMS'将子查询优化为连接,因此查询之间的差异可能并不重要。下面是Gordon Linoff删除子查询的重写版本。
select t.* from Users u1
join User u2 on u2.id_company = u1.id_company
join Ticket t on t.id_author = u1.id_user
where u1.id.user = 'User1';
然而,如果您的数据库优化SQL,差异可以忽略不计。