【问题标题】:Comparing a column using the data of one column in the same table SQL使用同一张表中一列的数据比较一列SQL
【发布时间】:2013-10-16 05:48:01
【问题描述】:

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

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

所以输出可能如下所示:

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

等等

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

我正在 MySQL 中执行此操作。谢谢。

【问题讨论】:

  • is a name that contains the same number => 我就是不明白

标签: mysql sql compare


【解决方案1】:

你需要在同一张桌子上创建一个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

【讨论】:

  • 谢谢,这似乎可行,但是如何防止看到重复项?
  • 您需要找到一种唯一标识行的方法。例如,您可以添加WHERE t1.name &lt; t2.name
  • 谢谢,这正是我需要的。
【解决方案2】:

你可以试试

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 个?

【讨论】:

    【解决方案3】:

    此查询将起作用,“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,所以它会返回两个不同的行,这是正确的。

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 2017-02-14
      • 1970-01-01
      • 2020-08-12
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      相关资源
      最近更新 更多