我有两个表首先是用户表
+------------------------------------
| Useid | user email | name |
|-----------|----------------|----- |
| 1 | sara@yahoo.com |sara |
+------------------------------------
第二是基础表
+-------------------------------
|fo_name | fo_email |
|---------------- |------------|
|Florida universty | @yahoo.com |
---------------------------------
注意:首先我将按用户ID进行搜索..没有工作......任何人都可以帮忙..
select fo_name,fo_email
(select
d_users.user_id,
SUBSTRING_INDEX(d_users.user_email,@) // some regex or substr code to cut domain
FROM d_users
where d_users.user_id = '1'
) as substr_email
from foundation
where fo_email = substr_email;
我想选择与user_email匹配的基础如何做到
regex
或substr_index
或其他
用户电子邮件,如sara@yahoo.com或adam@hotmail.com
像 @ yahoo.com 这样的基础电子邮件或类似 @ hotmail.com答案 0 :(得分:1)
我想我明白你想要的东西:
select
f.fo_name, f.fo_email, d.user_id, d.substr_email
from
foundation f
inner join
(select
d_users.user_id,
RIGHT(user_email, (LENGTH(user_email) - LOCATE('@', user_email) + 1)) as substr_email
FROM
d_users
where
d_users.user_id = '1') d ON f.fo_email = d.substr_email;
虽然这是一种非常奇怪(糟糕)的连接表的方式,每次都计算外键。
<强>更新强>
好的,我已经更新了我的答案并在SQLFiddle上做了示例,所以请查看它 - here
答案 1 :(得分:0)
首先: 如果你有一个基础表,你的用户表应该有一个外键来指向这个表。
例如,您的用户表可以变为:
id
username
fk_foundation
name
因此,您的示例数据变为:
id = 1
username = sara
fk_foundation = id (of foundation table, in your example is not specified)
name = sara
您对当前表结构的查询可能是(但性能可能很糟糕):
select *
from user u
join foundation f
on u.email like '%' + f.fo_email
where f.fo_email = '@yahoo.com'
如果更改表结构,查询将变为:
select *
from user u
join foundation f
on u.fk_foundation = f.id
where f.fo_email = '@yahoo.com'
比第一次
更快