MySQL子查询 - 返回多行

时间:2012-11-10 23:32:33

标签: mysql subquery

我有一个表格,其中列出了名称,列表中的第一个和最后一个。因此,名为“manager”的列可能具有“John Doe”的值。我想要查询一个简单地遍历此表中每一行的查询,并显示“manager”列的第一个字母和姓氏。我做的每件事都会出现“Subquery返回多行”。

从小处开始,我刚刚决定拉第一个字母:

SELECT id, LEFT((SELECT manager FROM my_table), 1) FROM my_table;

或者我完全偏离此

3 个答案:

答案 0 :(得分:2)

您正在使用子查询来获取父查询的字段。因此,子查询只能返回一行。这样想:结果集是一个二维结构。一系列的列和行。子查询返回的数据必须与它返回的事物的物理约束相匹配。

由于您要进入某个字段,这意味着一个SINGLE值。如果允许返回多个值,您实际上会尝试将2D结果集转换为3d集(行+列加上从其中一个字段中生长出来的摩天大楼)。

您的查询根本不需要是子查询:

SELECT id, LEFT(manager, 1) AS first_letter FROM yourtable

另外,如果你想要单独的名字和姓氏,你最好不要存储那些单独的字段。从一组名/姓名字段重建名称非常容易,但很难将单个名称可靠地分成单个名和姓,例如。

simple:
     John Doe   (fn: john, ln: doe)
hard:
     Billy Jo Todd (is that "Billy" and "Jo Todd", "Billy" and "Todd" with middle name Jo?

dead simple:

    field firstname = John
    field lastname = Doe

答案 1 :(得分:1)

如果你想使用子查询,这个查询可以按照你的意愿运行,但我不确定这是在任何情况下继续进行的最佳方法。我们需要更多关于您需要断言的信息。

SELECT 
  m1.id, 
  m2.manager

FROM 
  my_table AS m1 INNER JOIN
  (SELECT id, LEFT(manager, 1) AS manager FROM my_table) as m2
  ON m1.id = m2.id

http://sqlfiddle.com/#!2/9c395/6

答案 2 :(得分:0)

您必须向子查询添加条件才能返回要比较的行,如

SELECT manager FROM my_table WHERE id = 1