2013-07-12 93 views
0

我正面臨查詢優化問題。希望我會得到一些幫助。 該場景是我有4個表格。
Mysql查詢優化問題

Table 1 [asset_id, asset_name, User_id]. 
Table 2 [company_id, Company_name] 
Table 3 [User_id, User_name] 
Table 4 [Map_id, User_id, Company_id ] 

我的結果將是檢查從同一家公司的用戶無法能夠上傳同一資產,資產的檢查將在公司層面。 我已經寫了一個查詢,這也是爲了達到目的,但我需要消除子查詢的優化目的。
我寫的查詢有一個子查詢。 我的查詢是

SELECT COUNT(tg.asset_id) 
    FROM Table 1 tg 
INNER JOIN Table 4 mcu 
    ON ((tg.User_id = mcu.User_id ) 
    AND mcu.Company_id = (select Table 4.Company_id 
          from Table 4 
          where Table 4.User_id = 1)) 
WHERE tg.asset_name = 't1' ; 
+2

請發佈查詢也是如此。 –

+0

是的,我忘了這麼做 – Santanu

+0

你沒有使用表2和3.你錯過了什麼? – KaeL

回答

-1

子查詢似乎不需要這個查詢,因爲它也使用表4

SELECT COUNT(tg.asset_id) FROM Table 1 tg 
INNER JOIN Table 4 mcu ON tg.User_id = mcu.User_id 
WHERE tg.asset_name = 't1' 
AND mcu.ClientID = mcu.Company_id 
AND mcu.User_id = 1; 
+0

這裏需要的是,它應該檢查是否某個特定資產已經由同一家公司的用戶上傳過 – Santanu

+0

意味着你不需要該子查詢,因爲它也引用了表4.你可以在主查詢中包含這些條件。 –

+0

請檢查我的查詢的問題一次,因爲我已編輯查詢 – Santanu

0

希望這可能會有幫助::

SELECT 
COUNT(tg.asset_id) 
FROM Table 1 tg 
INNER JOIN Table 4 mcu ON (tg.User_id = mcu.User_id and Company_id = ClientID) 

WHERE tg.asset_name = 't1' and mcu.User_id = 1 
+0

請檢查查詢一次,因爲我已編輯查詢 這裏需要什麼,它應該檢查是一個特定的資產已被用戶上傳同一家公司 – Santanu