2014-06-21 70 views
1

我繼承了一個MySQL數據庫,有一個表,如下所示:MySQL的INNER_JOIN子查詢

mysql> describe stock_groups; 
+--------+--------------+------+-----+---------+----------------+ 
| Field | Type   | Null | Key | Default | Extra   | 
+--------+--------------+------+-----+---------+----------------+ 
| id  | int(11)  | NO | PRI | NULL | auto_increment | 
| group | varchar(5) | YES |  | NULL |    | 
| name | varchar(255) | YES |  | NULL |    | 
| parent | varchar(5) | YES |  | NULL |    | 
| order | int(11)  | YES |  | NULL |    | 
+--------+--------------+------+-----+---------+----------------+ 
5 rows in set (0.00 sec) 

當我運行mysql> select * from stock_groups where='D2';

我得到:

mysql> select * from stock_groups where `group`='D2'; 
+----+-------+------+--------+-------+ 
| id | group | name | parent | order | 
+----+-------+------+--------+-------+ 
| 79 | D2 | MENS | D  | 51 | 
+----+-------+------+--------+-------+ 
1 row in set (0.00 sec) 

,也是我有一個表格:

mysql> describe stock_groups_styles_map; 
+-------+-------------+------+-----+---------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+-------+-------------+------+-----+---------+----------------+ 
| id | int(11)  | NO | PRI | NULL | auto_increment | 
| group | varchar(5) | NO |  | NULL |    | 
| style | varchar(25) | NO |  | NULL |    | 
+-------+-------------+------+-----+---------+----------------+ 
3 rows in set (0.01 sec) 

當我運行:

mysql> select `group` from stock_groups_styles_map where style='N26'; 
+-------+ 
| group | 
+-------+ 
| B1 | 
| B11 | 
| D2 | 
| V2 | 
+-------+ 
4 rows in set (0.00 sec) 

我如何得到stock_groups.name

+3

這被稱爲「連接」,是SQL語言的基礎部分。如果您計劃使用SQL,您應該瞭解基礎知識。 –

+0

加入組上的兩個表並從第一個表中獲取名稱。 – Rahul

+1

您有名爲組和訂單的列。你應該偷偷摸摸地創造這個人的房子,並做出可怕的報復。打破侏儒之類的東西。 – Strawberry

回答

0
SELECT stock_groups.name FROM stock_groups_styles_map, stock_groups WHERE stock_groups_styles_map.style ='N26'; 

爲我工作。

0

您可以使用內部連接上的分組列

SELECT ss.group, sg.name from 
stock_groups sg inner join stock_groups_styles_map ss on ss.group = sg.group 
where ss.style='N26' 
1

加入的表,只選擇需要的數據。如果你需要的唯一行,使用distinct關鍵字:

select -- If you need unique names, use "select distinct" instead of "select" 
    sg.name 
from 
    stock_groups_styles_map as sgs 
    inner join stock_groups as sg on sgs.group = sg.group 
where 
    sgs.style = 'N26' 

你也可以解決這個使用子查詢,但是那將是相當inneficient在這種情況下。

一些很重要

您應該添加相應的索引到你的表。它會改善數據庫的性能。

+0

我得到錯誤1267(HY000):非法混合的排序規則(utf8_general_ci,IMPLICIT)和(utf8_unicode_ci,IMPLICIT)進行操作'=' – khinester

+1

@khinester,您會收到排序錯誤,最有可能導致兩個表中的兩列具有不同的排序規則方案。解決這個問題只需要改變'join'的'on'子句就像'on sgs.group = sg.group collat​​e utf8_general_ci' – Rahul