1

我有一个包含两列的表,名称和 numb。第一列包含一个名称,第二列包含该名称的数字。

我要做的是输出 3 列,名称、编号、名称,其中姓氏列是包含与名字列相同的数字的名称。

所以输出可能看起来像这样:

 | NAME | NUMB | NAME |
 |------|------|------|
 | john |    1 | lucy |
 | stan |    2 | paul |
 | jane |    3 | bill |

等等

我在这里有一个我正在使用的表的 sqlfiddle 链接:http ://sqlfiddle.com/#!2/ed72b/1

我在 MySQL 中这样做。谢谢你。

4

3 回答 3

3

你需要JOIN在同一张桌子上做一个,像这样:

SELECT t1.name, t1.numb, t2.name AS name2
FROM test t1
JOIN test t2 ON t1.numb = t2.numb AND t1.name <> t2.name

现场看!

于 2013-10-16T05:51:50.790 回答
1

你可以尝试类似的东西

SELECT *,
(SELECT name FROM test tt WHERE tt.numb = t.numb AND tt.name <> t.name limit 1) nname
from test t;

SQL 小提琴演示

查看第二组行时可以看出您的想法的问题

 | NAME | NUMB | NAME |
 |------|------|------|
 | paul |    1 | stan |
 | bill |    2 | jane |
 | lucy |    3 | john |

这与第一行相反。您如何确定使用前 3 个而不是后 3 个?

于 2013-10-16T05:51:44.823 回答
1

此查询将起作用,“SELECT t1.name,t1.numb,t2.name as newnumb from test as t1, test as t2 where t1.numb = t2.numb AND t1.name != t2.name;”

但它会给你输出

NAME    NUMB    NEWNUMB

lucy    1        john

paul    2        stan

bill    3        jane

stan    2        paul

jane    3        bill

john    1        lucy

因为如果 lucky 的 numb 是 1,john 也是 1,所以它会返回两个不同的行,这是正确的。

希望这对您有所帮助。

于 2013-10-16T06:00:28.477 回答