mysql INNER_JOIN 子查询

标签 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 wheregroup='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)

我还有一张 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)

当我运行时:

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

最佳答案

加入表格,并仅选择您需要的数据。如果您需要唯一的行,请使用 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'

您也可以使用子查询来解决这个问题,但在这种情况下那将是相当低效的。

重要的事情

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

关于mysql INNER_JOIN 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24344315/

相关文章:

mysql - 将重复显示为 1 所需的 SQL 语句

mysql - 在 SQL 查询正则表达式中转义百分号?

sql - 预演数据解决方案

mysql - SQL使COUNT()返回查询中的总行数

php - 制作一个简单的日历

mysql - 默认的mysql选择顺序

php - 如何插入两个表;一个将插入 1 行,另一个将插入多行,两个表有一个具有相同值的列

php - 对来自 MySql 的记录进行分组

mysql - 如何在 Laravel 模型类中实现 GROUP_CONCAT?

MySQL : how to find nearest polygon from a special point in mysql versions above 5. 6.1?