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 的孩子。

还有另一个包含电子邮件地址的表(帐户 a JOIN emails 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

为什么不加入acount's parent专栏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 回答