mysql INNER_JOIN子查询

时间:2014-06-21 17:55:35

标签: mysql sql

我继承了一个MySQL数据库,它有一个表如下:

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 个答案:

答案 0 :(得分: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'

您也可以使用子查询来解决这个问题,但在这种情况下,这样做会非常有用。

重要的事情

您应该将适当的索引添加到表中。它将提高数据库的性能。

答案 1 :(得分: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' 

答案 2 :(得分:0)

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

为我工作。