0

これは尋ねられましたが、既存の質問と私のケースとは完全には一致しません。私は2つのテーブルを持っています.最初のテーブルcredentialsid usernameemail

および( に対応する) およびを含むemail-alias表 。多くの場合、メールは「user.name@domain.com」ですが、エイリアスでは「usern@domain.com」になります。user-idcredentials.idemailcredentials

私が今持っているのは

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

しかし、「usern@domain.com」でクエリを実行すると、メールが常に一致するとは限りません。私がやりたいのは、フォールバックする1つのクエリでユーザー名を取得し、email-alias「usern@domain.com」を使用してそこから取得し、一致させるuser-idために再度使用することですcredentialsusername

落とし穴は、提供された電子メールがエイリアス化された「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存在する場合は2番目のテーブルから選択しない場合だと思います。そのためにサブクエリを使用します。お役に立てれば。

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 に答える