1

好的。让我们更清楚一点。

我想做的是以下几点:

我有一张这样的桌子...

    +---------+--------------------+------------------ --------+
    | 编号 | 姓名 | 电子邮件 |
    +---------+--------------------+------------------ --------+
    | 1 | 卡尔 | karl@email.com |
    +---------+--------------------+------------------ --------+
    | 2 | 弗雷德 | 弗雷德@email.com |
    +---------+--------------------+------------------ --------+
    | 3 | 克里斯托弗 | chris@email.com |
    +---------+--------------------+------------------ --------+
 

我想要结束的是一个新表,如下所示:

    +-----+---------------+---------+-- ---------+--------+
    | 编号 | 名称1 | 电子邮件1 | 名称2 | 电子邮件2 |
    +-----+---------------+---------+-- ---------+--------+
    | 1 | 弗雷德 | 弗雷德@email.com | 克里斯托弗 | chris@email.com |
    +-----+---------------+---------+-- ---------+--------+
    | 2 | 克里斯托弗 | chris@email.com | 卡尔 | karl@email.com |
    +-----+---------------+---------+-- ---------+--------+
    | 3 | 卡尔 | karl@email.com | 弗雷德 | 弗雷德@email.com |
    +-----+---------------+---------+-- ---------+--------+
 

这些值在水平方向 (id[1].name1 != id[1].name2) 和垂直方向 (id[1].name1 != id[2].name1) 是唯一的。

因此,这个输出应该是不可能的:

    +-----+---------------+---------+-- ---------+--------+
    | 编号 | 名称1 | 电子邮件1 | 名称2 | 电子邮件2 |
    +-----+---------------+---------+-- ---------+--------+
    | 1 | 弗雷德 | 弗雷德@email.com | 克里斯托弗 | chris@email.com |
    +-----+---------------+---------+-- ---------+--------+
    | 2 | 弗雷德 | 弗雷德@email.com | 卡尔 | karl@email.com |
    +-----+---------------+---------+-- ---------+--------+
    | 3 | 卡尔 | karl@email.com | 卡尔 | karl@email.com |
    +-----+---------------+---------+-- ---------+--------+
 

我怎样才能以简单的方式实现这一目标?

4

1 回答 1

0

我认为这个查询应该可以完成工作:

SELECT id1.name AS name1, id1.email AS email1, id2.name AS name2, id2.email AS email2
FROM table AS id1
JOIN table AS id2 ON ( name1 != name2 ) 
WHERE name1 < name2

其中table是您的表的名称。我希望它会有所帮助。

于 2012-11-08T10:37:13.597 回答