我有一个表,其中列出了名称,列表中的第一个和最后一个 . 因此,名为“manager”的列可能具有“John Doe”的值 . 我想纠正一个简单地遍历此表中每一行的查询,并显示“manager”列的第一个字母和姓氏 . 我做的每件事都会出现“Subquery返回多行” .
从小处开始,我刚刚决定拉第一封信:
SELECT id, LEFT((SELECT manager FROM my_table), 1) FROM my_table;
或者我完全不依赖于此
如果你想使用子查询,这个查询就像你想要的那样工作,虽然我不确定这是在任何情况下继续进行的最佳方法 . 我们需要更多关于您需要断言的信息 .
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
必须向子查询添加条件才能返回要比较的行
SELECT manager FROM my_table WHERE id = 1
您正在使用子查询来获取父查询的字段 . 因此,子查询只能返回一行 . 这样想:结果集是一个二维结构 . 一系列的列和行 . 子查询返回的数据必须与它返回的事物的物理约束相匹配 .
由于您正在进入某个字段,这意味着一个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
3 回答
如果你想使用子查询,这个查询就像你想要的那样工作,虽然我不确定这是在任何情况下继续进行的最佳方法 . 我们需要更多关于您需要断言的信息 .
http://sqlfiddle.com/#!2/9c395/6
必须向子查询添加条件才能返回要比较的行
您正在使用子查询来获取父查询的字段 . 因此,子查询只能返回一行 . 这样想:结果集是一个二维结构 . 一系列的列和行 . 子查询返回的数据必须与它返回的事物的物理约束相匹配 .
由于您正在进入某个字段,这意味着一个SINGLE值 . 如果允许返回多个值,您实际上会尝试将2D结果集转换为3d集(行列加上从其中一个字段中生长的摩天大楼) .
您的查询根本不需要是子查询:
此外,如果你想要单独的名字和姓氏,你最好不要存储那些单独的字段 . 从一组名/姓名字段重建名称非常容易,但是很难将单个名称可靠地分成单独的名字和姓氏,例如: