0
SELECT a.tag,CONCAT(u.first_name,' ',u.last_name)
FROM assets a
LEFT JOIN (SELECT asset_id,assigned_to_id
FROM asset_activity
WHERE assigned IN (SELECT MAX(assigned)
FROM asset_activity
GROUP BY asset_id))
v ON v.asset_id = a.id
LEFT JOIN users u ON v.assigned_to_id = u.id
WHERE ($1 IS NULL OR u.last_name LIKE $1)
由於MySQL在子查詢上執行了左連接,所以我需要找到一些其他的方法來做到這一點。我可以在select中選擇我需要的子查詢,但它需要有條件。它只應該返回與LIKE匹配的記錄,並且對於子查詢,它仍然會返回來自assets的記錄,其中assign_to的值爲null,所以我不能這樣做。在MySQL中使用條件的子查詢左連接?
執行計劃:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY a ALL null null null null 1,447
1 PRIMARY <derived2> ALL null null null null 1,396
1 PRIMARY u eq_ref PRIMARY PRIMARY 4 v.assigned_to_id 1
2 DERIVED asset_activity ALL null null null null 1,400 Using where
3 DEPENDENT SUBQUERY asset_activity index null asset_id 4 null 1,400 Using filesort
指標:
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
assets 0 PRIMARY 1 id A 144 "" BTREE ""
assets 1 serial 1 serial A 1447 YES BTREE ""
assets 1 serial 2 cal_num A 1447 YES BTREE ""
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
asset_activity 0 PRIMARY 1 id A 1400 "" BTREE ""
asset_activity 1 asset_id 1 asset_id A "" BTREE ""
asset_activity 1 location_id 1 location_id A YES BTREE ""
asset_activity 1 assigned_to_id 1 assigned_to_id A YES BTREE ""
asset_activity 1 assigned_to_table 1 assigned_to_table A YES BTREE ""
asset_activity 1 created 1 created A "" BTREE ""
請提供表格架構,索引,執行計劃結果 – ajreal
I' m不知道如何格式化這些數據,所以它的可讀性。 – Kyro
http://meta.stackexchange.com/questions/72082/changes-to-syntax-highlighting http://google-code-prettify.googlecode.com/ svn/trunk/README.html – ajreal