2013-03-17 52 views
2

我使用MySQl根據「模塊」表中的類別ID從1個表中選擇類別名稱。這是SQl考慮加入嗎?

我有下面的SQL我需要工作正常,但我想知道,如果這被認爲是一個JOIN與否?

既然它不叫JOIN

SELECT `mo_category_fk` , `mo_name_vc` , `mc_name_vc` 
FROM x_modcats mc, x_modules m 
WHERE mc.mc_id_pk = m.mo_category_fk 
AND m.mo_folder_vc = :module 
+2

是的,你正在加入表格。不過,我個人更喜歡使用INNER JOIN語法... – sgeddes 2013-03-17 01:08:18

+0

順便說一句 - 這可能是有用的... http://stackoverflow.com/a/1018825/1073631 – sgeddes 2013-03-17 01:09:25

回答

2

是的,你加入。根據documentation,可以用作JOIN關鍵字的替代品,除非您不能使用非常有用的ON子句。但是,您有一個連接WHERE子句中的表的條件。在我看來,它更有意義做它作爲FROM子句的一部分:

SELECT mo_category_fk, mo_name_vc, mc_name_vc 
FROM x_modcats mc 
JOIN x_modules m ON (mc.mc_id_pk = m.mo_category_fk) 
WHERE m.mo_folder_vc = :module 
3

是 - 在MySQL隱性和顯性加入具有相同的執行計劃。您可以使用EXPLAIN進行驗證。但這裏是另一個線程的示例:

mysql> explain select * from table1 a inner join table2 b on a.pid = b.pid; 
+----+-------------+-------+------+---------------+------+---------+--------------+------+-------+ 
| id | select_type | table | type | possible_keys | key | key_len | ref   | rows | Extra | 
+----+-------------+-------+------+---------------+------+---------+--------------+------+-------+ 
| 1 | SIMPLE  | b  | ALL | PRIMARY  | NULL | NULL | NULL   | 986 |  | 
| 1 | SIMPLE  | a  | ref | pid   | pid | 4  | schema.b.pid | 70 |  | 
+----+-------------+-------+------+---------------+------+---------+--------------+------+-------+ 
2 rows in set (0.02 sec) 

mysql> explain select * from table1 a, table2 b where a.pid = b.pid; 
+----+-------------+-------+------+---------------+------+---------+--------------+------+-------+ 
| id | select_type | table | type | possible_keys | key | key_len | ref   | rows | Extra | 
+----+-------------+-------+------+---------------+------+---------+--------------+------+-------+ 
| 1 | SIMPLE  | b  | ALL | PRIMARY  | NULL | NULL | NULL   | 986 |  | 
| 1 | SIMPLE  | a  | ref | pid   | pid | 4  | schema.b.pid | 70 |  | 
+----+-------------+-------+------+---------------+------+---------+--------------+------+-------+ 
2 rows in set (0.00 sec)