我需要問一些真正令人困惑關於加入MySQL的加入+子查詢混亂
我想什麼,我相信這爲我所用過去的工作,但好像是缺少了一些東西:
此查詢結果在兩個表中,其中的client_id爲1的數據 - 做工精細
/* gets data for one client_id*/
approach 1A
SELECT *
FROM clients LEFT JOIN client_modules
ON client_modules.client_id = clients.client_id
WHERE clients.client_id = 1;
現在,這種查詢是什麼,我認爲應該返回相同的結果,因爲,我已經使用子查詢中加入過濾結果第一即,已經從client_id 1的模塊獲取數據,但由於某種原因,它將給出其他client_ids數據作爲最終結果。
/* gets data for one client_id sub-query approach*/
approach 2A
SELECT *
FROM clients LEFT JOIN (SELECT client_id, module_name
FROM client_modules
WHERE client_modules.client_id = 1)
AS client_moduless ON client_moduless.client_id = clients.client_id;
/* gets data for all client_ids */
approach 1B
SELECT * FROM clients
LEFT JOIN client_modules ON client_modules.client_id = clients.client_id;
/* gets data for all client_ids*/
approach 2B
SELECT *
FROM clients LEFT JOIN (SELECT client_id, module_name
FROM client_modules) AS client_moduless
ON client_moduless.client_id = clients.client_id;
問題:
1)哪種方法更有效當中xA and xB
大數據量的使用?
2)爲什麼是第二個方法2A
從client_ids other then 1
給出的結果,儘管運行子查詢中分別加入正常工作
3)將在2B
子查詢,如果不使用執行從父每個記錄where子句?
4)如果我改變1A查詢
SELECT * FROM clients
JOIN client_modules ON client_modules.client_id = clients.client_id AND client_modules.client_id = 1
剛剛取消了對客戶表中的WHERE子句和推杆上的子表聯接子句中是這種高效或where子句?即從左側的所有記錄,但只能從右側相關的記錄 - 因爲你已經使用了左連接
問候
用於識別'LEFT JOIN'我知道這一點,但這是我錯過了:),但是子查詢與直接連接表名有什麼關係?任何想法? – Junaid
更新了答案 – Arion
讚賞!請參閱更新後的問題 – Junaid