2

次のようなデータのテーブルがあります

id    name      created         parent
------------------------------------------------
1     Alpha     11385209583     0
2     Bravo     11385209619     0
3     Bravo-A   11385209701     2
4     Bravo-B   11385209777     2

Bravo-AとBravo-BがBravoの子であるように。

電子メールアドレスを含む別のテーブルがあります(アカウントはJOIN電子メールe ON a.id = e.account_id)が、親アカウントのみが電子メールを持っています。つまり、Bravo-AのメールアドレスはBravoのものです。

私がaccounts.id番号を持っている場合、正しいアカウントのemails.emailフィールドを取得するクエリを作成することは可能ですか(idが1の場合はaccount_id = 1、idが2、3の場合はaccount_id = 2、または4)?

(これが少し冗長であるか、要点がない場合は、申し訳ありませんが、言語化に問題がありました!)

4

3 に答える 3

4

acountparent列をに結合してみませんemailか?

SELECT  a.*, 
        e.emailadd as parentEAdd, 
        COALESCE(b.emailadd,'') as ChildEAdd -- can contain null values when 
                                             -- parentID is 0
FROM    `accounts` a 
             INNER JOIN `emails` e 
                  ON a.id = e.account_id
             LEFT JOIN `emails` b
                  ON a.parent = b.account_id
于 2012-08-23T23:13:17.877 に答える
1

最も簡単な方法は、アカウントテーブルに別のフィールド(「mail_id」など)を配置し、そこに各メールのIDを保存して、そのフィールドに基づいて結合を行うことです。そうすれば、あなたが望むなら、子供たちは同じまたは異なるメールを持っているかもしれません

于 2012-08-23T23:10:46.103 に答える
0

自分で答えました!

SELECT a.id, e.email 
FROM account a 
         INNER JOIN emails.e 
              ON e.account_id = IF(a.parent <> 0, a.parent, a.id)

私がSQLで見つけたのは、常によりエレガントな方法があるということです。

于 2012-08-23T23:50:18.107 に答える