mysql - MySql 用列名连接两个表
问题描述
我的 MySQL 数据库中有这些表:
汽车表:
+----Cars Table-----+
+---------------------+
| id | BMW | KIA |-and another cars
+----+----------+-----+
| 1 | M5 | Rio |
| 2 | Z1 | Serato |
| 3 | X5 | Sorento|
像表:
+----------------------+-----+
| id | Cars_id| Cars |ip |
+----+----------+------+-----+
| 1 | 1 | KIA |1.0.1|
| 2 | 1 | BMW |1.0.1|
基本上,Cars 表有更多的汽车 Mark 及其型号。
我的问题是,如何加入这些表 - Like.Cars_id=Cars.id 和 Like.Cars=Cars.Column 名称?
所以,我想要这样的查询:
SELECT Cars.BMW, Cars.KIA, COUNT(Like.ip) AS likes
FROM CARS_Table
LEFT JOIN Like_table
ON Cars.id = Like.Cars_id AND what?
解决方案
你应该这样规范化表格
Brand
id, name
1, BMW
2, KIA
3, ...
cars
id, id_brand, car_name
1, 1, M5
2, 1, Z1
3, 1, X5
4, 2, Rio
5, 2, Serato
6, 2, Sorento
like_table
id, cars_id, ip
1, 1, 1.0.1
2, 1, 1.0.1
select b.name, c.name, count(ip)
from like_table l
inner join cars c on l.cars_id = c.id
inner join Brand b on b.id = c.id_brand
group by b.name, c.name
这样既容易获得汽车的喜欢,也容易获得品牌和其他人的喜欢
select b.name count(ip)
from like_table l
inner join cars c on l.cars_id = c.id
inner join Brand b on b.id = c.id_brand
group by b.name
推荐阅读
- shell - 如何组合两个正则表达式(模式)值 int one
- node.js - 将 QS 查询字符串转换为弹性云查询
- docker - 获取容器指标 cpu 负载
- java - 如何使用 Spring Boot Batch Job 更新数据库中的大量数据
- amazon-web-services - Ansible ec2_vpc_route_table 剧本错误是:“dict object”没有属性子网
- xml - Blogger 标题链接通过 XML 导入
- java - 如何更改 Spark SQL(在 java 中)DataFrame 中的列类型?
- android - React Native:如何避免随着时间的推移在不同的本地环境中构建错误
- java - android.support.v4.widget.DrawerLayout 无法实例化 - 实现的损坏的类路径
- css - 如何使用 CSS 为选中的复选框选择标签?