我有一个包含两列的表,名称和麻木。第一列包含名称,第二列包含该名称的数字。
我尝试做的是输出3列,名称,编号,名称,其中姓氏列是与第一个名称列包含相同编号的名称。
因此输出可能如下所示:
| NAME | NUMB | NAME |
|------|------|------|
| john | 1 | lucy |
| stan | 2 | paul |
| jane | 3 | bill |
等
我在这里使用的表格有一个sqlfiddle链接:http://sqlfiddle.com/#!2/ed72b/1
我在MySQL中这样做。谢谢。
答案 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;
在查看第二组行时可以看到您的想法的问题
| 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也是,所以它将返回两个不同的行,这是正确的。
希望这会对你有所帮助。