php - 选择多个列而不进行多个查询 php mysql
问题描述
如何在没有多个查询的情况下连接多个表列?有没有更有效的方法来做到这一点?表 1 和表 2 将有超过 3000 行数据。
表格1
=========================================
ID Name skill skill2 skill3
=========================================
1 Ed 1 4 3
...
3000 Dave 200 500 345
--------------------------------------
表2
=========================
ID Skill Name
=========================
1 php
2 html
3 css
4 mysql
...
3000 python
-------------------------
例如
SELECT Table1.usrname,
(SELECT Table2.skillname FROM Table2 WHERE Table1.skill1 = Table2.Id) As skill1,
(SELECT Table2.skillname FROM Table2 WHERE Table1.skill2 = Table2.Id) As skill2,
(SELECT Table2.skillname FROM Table2 WHERE Table1.skill3 = Table2.Id) As skill3
FROM Table1
提前致谢
解决方案
您使用相关子查询的方法似乎是解决问题的相关方法。为了提高性能,请确保您有一个索引,table2(id, skillname)
以便子查询有效执行。
您可能还想尝试多个连接:
select t1.username, t21.skillname skill1, t22.skillname skill2, t23.skillname skill3
from table1 t1
inner join table2 t21 on t21.id = t1.skill1
inner join table2 t22 on t22.id = t1.skill2
inner join table2 t23 on t23.id = t1.skill3
这种方法的一个优点是,如果需要,您可以轻松地从技能表中获取更多列,而不是您使用的内联子查询,它总是返回一个标量值。
如果可能缺少技能,请使用left join
s 而不是inner join
s。
推荐阅读
- reactjs - Redux 状态已更新,但未调用 mapStateToProps
- react-native - 使用 react-native-dialog,如何获取 Dialog.Input 内容?
- php - Laravel 5.7 验证电子邮件本地化
- awk - 从相对路径中删除所有路径字符串
- command-line - jq:使用嵌套字段名称作为 group_by 语句的命令行参数
- excel - 用代码中的字母数字替换散文格式描述的公式
- python - write() 参数必须是 str,而不是字节 python
- python-imaging-library - 使用 PIL 转换 base64 编码的 png pic
- ios - 故事板中的重叠视图
- azure-cosmosdb - Azure CosmosDb 计数消耗大量 RU/s