使用同一个表SQL中的一列数据比较列

时间:2013-10-16 05:48:01

标签: mysql sql compare

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

我尝试做的是输出3列,名称,编号,名称,其中姓氏列是与第一个名称列包含相同编号的名称。

因此输出可能如下所示:

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

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

我在MySQL中这样做。谢谢。

3 个答案:

答案 0 :(得分: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

live

答案 1 :(得分:0)

您可以尝试类似

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

SQL Fiddle DEMO

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

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

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

答案 2 :(得分:0)

此查询将起作用,“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

因为如果幸运的麻木是1,那么约翰的1也是,所以它将返回两个不同的行,这是正确的。

希望这会对你有所帮助。