我试图构建的查询有三个问题。
一个表包含与正在处理该项目的用户名关联的项目条目。
表1
| id | ... | userName | ... |
另一个表格中保存了所有用户及其各自的电子邮件和作业类型
表2
| id | ... | jobTypeId | email | ... |
最后一个表有一个作业类型ID列表及其作业名称
表3
| jobTypeId | jobTypeName |
与电子邮件相比,我如何才能从表1 用户名中选择项目 用户名 表2 jobTypeIds 的用户表3 等于某个值(例如" 2&#34) ;)
如何将表1 中的userName与来自表2 的电子邮件进行比较,而不包含@ whatever.com部分;仅将电子邮件的开头与用户名
示例数据
表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 |
答案 0 :(得分:0)
你可以尝试一下:
SELECT
t1.id as ProjectID, t1.userName
FROM
TABLE1 AS t1,
TABLE2 AS t2,
TABLE3 AS t3
WHERE
TRIM(t1.userName) = TRIM(split_part(t2.email, "@", 1))
&& t2.jobTypeId = t3.jobTypeId
&& t3.jobTypeId = 2
GROUP BY
ProjectID
这假定Postgres split_part()和MySQL一样工作SUBSTRING_INDEX()。
编辑2:如果table2.jobTypeId = 2的行数较少,则WHERE子句应如下所示:
WHERE
t3.jobTypeId = 2
&& t3.jobTypeId = t2.jobTypeId
&& TRIM(split_part(t2.email, "@", 1)) = TRIM(t1.userName)
编辑:我添加了TRIM,以防数据格式可能包含用户名和电子邮件的空白。以下是有关在Postgres中使用SPLIT_PART()的更多信息:http://dataiseverything.blogspot.com/2015/01/equivalent-of-substringindex-in-mysql.html
答案 1 :(得分:0)
你似乎想要:
<nav>
<ul>
<li>
<a href="#">About</a>
<div style="background-color: #c03546;height: 10px;"></div>
</li>
<li>
<a href="#">Companies</a>
<div style="background-color: #f26d5b;height: 10px;"></div>
</li>
<li>
<a href="#">Brands</a>
<div style="background-color: #f6ea8c;height: 10px;"></div>
</li>
</ul>
</nav>
您不需要select t1.projectid, t1.username
from table1 t1 join
table2 t2
on t2.email like t1.username || '@%'
where t2.jobtypeid = 2;
,因为您正在比较作业类型ID,而不是名称。
您还应该修复数据模型,因此table3
会使用table1
中table2
的ID,而不是比较用户名和电子邮件。