0

有人问过这个问题,但我的情况与现有问题不太相符。我有两张桌子,第一张桌子是credentialsid usernameemail

和一个email-aliasuser-id(对应于credentials.id)和email。电子邮件credentials通常是“user.name@domain.com”,而别名则是“usern@domain.com”。

我现在只有

SELECT `username` FROM `credentials` WHERE `email` LIKE ?

但是,如果我使用“usern@domain.com”查询,电子邮件将不会总是匹配。我想要做的是通过一个查询获取用户名,该查询将回退email-alias并使用“usern@domain.com”从那里获取一个user-id再次credentials用于匹配username

陷阱是提供的电子邮件可能是别名“usern@..”或“user.name@..”

mysql> describe `email-alias`;
+---------+--------------+------+-----+---------+----------------+
| Field   | Type         | Null | Key | Default | Extra          |
+---------+--------------+------+-----+---------+----------------+
| id      | int(11)      | NO   | PRI | NULL    | auto_increment |
| user-id | int(11)      | NO   | UNI | NULL    |                |
| email   | varchar(100) | YES  |     | NULL    |                |
+---------+--------------+------+-----+---------+----------------+


mysql> describe `credentials`;
+-----------------+--------------+------+-----+---------------------+----------------+
| Field           | Type         | Null | Key | Default             | Extra          |
+-----------------+--------------+------+-----+---------------------+----------------+
| id              | int(11)      | NO   | PRI | NULL                | auto_increment |
| username        | varchar(100) | NO   | UNI | NULL                |                |
| email           | varchar(100) | NO   |     | NULL                |                |
+-----------------+--------------+------+-----+---------------------+----------------+
4

2 回答 2

2

您的问题有点令人困惑,但我认为您要做的是username从第一个表中选择(如果email存在),如果它不从第二个表中选择(如果存在)。您将为此使用子查询。希望这可以帮助。

SELECT `c.username`
FROM credentials c
WHERE c.email = 'usern@domain.com' OR c.id = 
(SELECT `e.user-id` from email-alias e WHERE e.email = "usern@domain.com")
于 2012-08-11T15:25:02.873 回答
1

我不确定我是否清楚地理解了你的问题,因为它太令人困惑了。但让我试一试。您需要使用INNER JOIN.

SELECT  `username`
FROM    credentials a
            INNER JOIN email_alias b
                on a.ID = b.userID
WHERE   b.email = 'usern@domain.com'

更新 1

SELECT  `username`
FROM    credentials a
            INNER JOIN email_alias b
                on a.ID = b.userID
WHERE   b.email LIKE '%usern@%'
于 2012-08-11T15:14:04.263 回答