sql - 在三个表上设置条件进行选择
问题描述
对于我正在尝试构建的查询,有三个有问题的表。
一个表具有与正在处理该项目的用户名相关联的项目条目。
表格1
| id | ... | userName | ... |
另一个表中保存了所有用户及其各自的电子邮件和工作类型
表 2
| id | ... | jobTypeId | email | ... |
最后一个表有一个作业类型 ID 列表及其作业名称
表3
| jobTypeId | jobTypeName |
我如何才能只从表 1中选择项目,其中用户名与表 2 中的电子邮件相比是表 3 中的 jobTypeIds等于某个值(例如“ 2 ”)的用户
如何在不包含 @whatever.com 部分的情况下将表 1中的用户名与表2中的电子邮件进行比较;仅将电子邮件的开头与用户名进行比较
示例数据
表格1
| id | ... | userName | ... |
| 1 | | bDover | |
| 2 | | dLong | |
| 3 | | eEddy | |
| 4 | | dLong | |
| 5 | | eEddy | |
| 6 | | bDover | |
| 7 | | dLong | |
| 8 | | eEddy | |
| 9 | | dLong | |
| 10 | | dLong | |
表 2
| id | ... | jobTypeId | email | ... |
| 1 | | 1 | bdover@whatever.com | |
| 2 | | 2 | dLong@whatever.com | |
| 3 | | 2 | eEddy@whatever.com | |
| 4 | | 3 | ...@whatever.com | |
表3
| jobTypeId | jobTypeName |
| 1 | Student |
| 2 | Teacher |
| 1 | Admin |
预期结果(jobTypeId = 2)
| projectId | userName |
| 2 | dLong |
| 3 | eEddy |
| 4 | dLong |
| 5 | eEddy |
| 7 | dLong |
| 8 | eEddy |
| 9 | dLong |
| 10 | dLong |
解决方案
你似乎想要:
select t1.projectid, t1.username
from table1 t1 join
table2 t2
on t2.email like t1.username || '@%'
where t2.jobtypeid = 2;
您不需要table3
,因为您正在比较作业类型 ID,而不是名称。
您还应该修复数据模型,因此table1
将 idtable2
用于join
,而不是比较用户名和电子邮件。
推荐阅读
- php - 新手 - 如果图像字段为空,则使用当前的个人资料图片 - PHP
- python-3.x - 指定的至少一个标签必须在 y_true 中,目标向量是数字
- typescript - 更改角度材料中的选择时如何从后端获取url到iframe
- javascript - 如何制作复选框过滤器?
- javascript - 如果语句为真,脚本在块内返回 console.log() 但不返回
- asp.net-core - 登录管理器
.PasswordSignInAsync() 抛出 System.Text.Json 对象循环异常 - clojure - 在 .edn 文件中使用 #inst 将时间戳播种到 clojure 中的 jdbc 数据库
- python - 使用 Pandas 进行事件搜索
- java - java中这两个数组语句的区别
- android - Google 控制台上的 java.lang.RuntimeException