我有一张表,其中列出了名称列表中的第一个和最后一个列。因此,名为“经理”的专栏可能具有“John Doe”的价值。我想纠正一个查询,只需遍历此表中的每一行,并显示“manager”列的第一个字母和最后一个名称。我所做的每件事都会提出“子查询返回多行”。MySQL子查询 - 返回多于一行
先发小,我刚刚决定放弃第一个字母:
SELECT id, LEFT((SELECT manager FROM my_table), 1) FROM my_table;
还是我对这个
我有一张表,其中列出了名称列表中的第一个和最后一个列。因此,名为“经理”的专栏可能具有“John Doe”的价值。我想纠正一个查询,只需遍历此表中的每一行,并显示“manager”列的第一个字母和最后一个名称。我所做的每件事都会提出“子查询返回多行”。MySQL子查询 - 返回多于一行
先发小,我刚刚决定放弃第一个字母:
SELECT id, LEFT((SELECT manager FROM my_table), 1) FROM my_table;
还是我对这个
只是完全关闭基地您使用子查询读取到的领域父查询。因此,子查询只能返回一行。这样想:结果集是一个二维结构。一系列的列和行。子查询返回的数据必须与它返回的事物的物理约束匹配。
由于您正在进入一个字段,这意味着一个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
您必须添加一个条件,你的子查询返回你想如果你想使用子查询像
SELECT manager FROM my_table WHERE id = 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
好家伙,这是梦幻般的。我不知道为什么我要比原本更难。这是一个很好的答案!这是我现在的查询: SELECT DISTINCT sponsor,CONCAT(LEFT(sponsor,1),SUBSTRING(sponsor,(LOCATE(“,sponsors)+ 1)))AS First_Character FROM importReviewInfo; – CodeMoto