如果结果不匹配,请从另一个表中选择

时间:2012-08-11 15:05:49

标签: mysql

有人问过这个问题,但我的问题并不完全符合现有问题。 我有两个表,第一个表是credentials id usernameemail

email-alias表格user-id(对应credentials.id)和emailcredentials中的电子邮件通常是“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                |                |
+-----------------+--------------+------+-----+---------------------+----------------+

2 个答案:

答案 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@%'