1

我有两个表首先是用户表

+------------------------------------
|  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这样的基金会电子邮件

4

2 回答 2

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 上做了例子,所以请检查一下 -这里

于 2013-10-09T10:02:47.750 回答
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'

比第一个更快

于 2013-10-09T09:54:14.717 回答