2014-12-28 61 views
0

我花了很多時間將查詢合併爲一個查詢。我有3個數據庫表。這是示例模式。 enter image description here將2個sql查詢合併成一個

我只有會話的用戶名。我需要從用戶公司的數據庫中獲取所有票據。
例如:
用戶A在公司B工作。
公司B有很多工人。創建票的工人。
用戶A登錄後查看貴公司的所有門票。
我現在使用2個查詢完成了此操作:
- 取用usera公司ID
- 取用戶在特定公司工作的門票。

+3

(1)請提供樣本數據和期望的結果。 (2)另外,編輯你的問題,幷包括你試圖結合的查詢。 –

回答

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 
+0

工作thx尋求幫助。 – seti

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'); 
+0

什麼是更快的結果或@JoelCoehoorn? – seti

+1

@seti。 。 。你應該測試它並嘗試一下。通過'users(id_user)'的索引,我預計性能會相似。但是,此版本返回票證信息(這是您似乎想要的),並且沒有重複的列名稱,這可能會造成混淆。 –

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的差異可以忽略不計。

+1

我將連接更改爲where子句。 HQL不支持加入。 – seti