简体   繁体   English

mysql INNER_JOIN子查询

[英]mysql INNER_JOIN subquery

I have inherited a MySQL database, that has a table as follows: 我继承了一个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)

When I run mysql> select * from stock_groups where group ='D2'; 当我运行mysql> select * from stock_groups where group ='D2';

I get: 我得到:

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)

and also i have a table: 而且我有一张桌子:

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)

when I run: 当我跑步时:

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

how do i get the stock_groups.name ? 我如何获得stock_groups.name

Join the tables, and select only the data you need. 联接表,然后仅选择所需的数据。 If you need unique rows, use the distinct keyword: 如果您需要唯一的行,请使用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'

You could also solve this using subqueries, but that would be rather inneficient in this case. 您也可以使用子查询来解决此问题,但是在这种情况下那将是非常无效的。

Something important 重要的事情

You should add the appropriate indexes to your tables. 您应该在表中添加适当的索引。 It will improve the performance of your database. 它将提高数据库的性能。

You can use inner join on group column 您可以在组列上使用内部联接

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' 
SELECT stock_groups.name FROM stock_groups_styles_map, stock_groups WHERE stock_groups_styles_map.style ='N26';

为我工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM