我花了很多時間將查詢合併爲一個查詢。我有3個數據庫表。這是示例模式。 將2個sql查詢合併成一個
我只有會話的用戶名。我需要從用戶公司的數據庫中獲取所有票據。
例如:
用戶A在公司B工作。
公司B有很多工人。創建票的工人。
用戶A登錄後查看貴公司的所有門票。
我現在使用2個查詢完成了此操作:
- 取用usera公司ID
- 取用戶在特定公司工作的門票。
我花了很多時間將查詢合併爲一個查詢。我有3個數據庫表。這是示例模式。 將2個sql查詢合併成一個
我只有會話的用戶名。我需要從用戶公司的數據庫中獲取所有票據。
例如:
用戶A在公司B工作。
公司B有很多工人。創建票的工人。
用戶A登錄後查看貴公司的所有門票。
我現在使用2個查詢完成了此操作:
- 取用usera公司ID
- 取用戶在特定公司工作的門票。
這應做到:
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
工作thx尋求幫助。 – seti
這是你在找什麼?
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');
什麼是更快的結果或@JoelCoehoorn? – seti
@seti。 。 。你應該測試它並嘗試一下。通過'users(id_user)'的索引,我預計性能會相似。但是,此版本返回票證信息(這是您似乎想要的),並且沒有重複的列名稱,這可能會造成混淆。 –
加入通常快於子查詢,但是很多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的差異可以忽略不計。
我將連接更改爲where子句。 HQL不支持加入。 – seti
(1)請提供樣本數據和期望的結果。 (2)另外,編輯你的問題,幷包括你試圖結合的查詢。 –