有人问过这个问题,但我的问题并不完全符合现有问题。
我有两个表,第一个表是credentials
id
username
和email
和email-alias
表格user-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
以便在{{1}中再次使用匹配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 | |
+-----------------+--------------+------+-----+---------------------+----------------+
答案 0 :(得分: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")
答案 1 :(得分: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@%'