子查询命令不同步
Subquery commands out of sync
我在 PHPMyAdmin 上 运行 一些 SQL。
我的 table 有以下字段:
address
firstname
joindate
memid
recommendedby
surname
telephone
zipcode
recommendedby
字段包含成员 ID。我想按姓名 select 成员,并按姓名列出推荐他们的人。我尝试使用子查询和自连接来做到这一点:
SELECT CONCAT(surname, ", ", firstname),
(SELECT CONCAT(m1.firstname, " ", m1.surname)
FROM Members as m1
INNER JOIN Members as m2
ON m1.memid = m2.recommendedby) AS recommendedby
FROM Members
ORDER BY surname, firstname
这会引发错误 #2014 - Commands out of sync; you can't run this command now
。子查询自己干净地运行。有谁知道是什么导致了这里的错误?
如果没有 join
:
,您的查询会很好
SELECT CONCAT(m.surname, ', ', m.firstname),
(SELECT CONCAT(m1.firstname, ' ', m1.surname)
FROM Members m1
WHERE m1.memid = m.recommendedby
) AS recommendedby
FROM Members m;
您也可以在外部查询中使用 LEFT JOIN
来执行此操作。但子查询中不需要 JOIN
-- 只有一个相关子句。
我为你的问题创建了一个例子:
CREATE TABLE #Members (
[address] VARCHAR(100),
firstname VARCHAR(100),
joindate VARCHAR(100),
memid int,
recommendedby int,
surname VARCHAR(100),
telephone VARCHAR(100),
zipcode VARCHAR(100),
);
INSERT INTO #Members
([address], firstname,surname,joindate,memid,recommendedby,telephone,zipcode)
VALUES
('adress1','Jack','Ady','2020-01-01',1,null,'0123455','104555'),
('adress2','Harry','Adwell','2020-01-02',2,3,'0123445455','1075'),
('adress3','John','Age','2020-01-03',3,4,'0124543455','1450855'),
('adress4','Robert','Ainslie','2020-01-04',4,1,'0124543455','10545055'),
('adress5','Yehuda','Aarons','2020-01-05',5,4,'0124543455','105595'),
('adress6','Michael','Altis','2020-01-01',6,1,'0124543455','1012')
;
select CONCAT(m1.firstname, '-', m1.surname) MemberName,
CONCAT(m2.firstname, '-', m2.surname)recommendedMember
from #Members m1
left join #Members m2 on m1.memid = m2.recommendedby
结果=
MemberName recommendedMember
Jack-Ady Robert-Ainslie
Jack-Ady Michael-Altis
Harry-Adwell -
John-Age Harry-Adwell
Robert-Ainslie John-Age
Robert-Ainslie Yehuda-Aarons
Yehuda-Aarons -
Michael-Altis -
我在 PHPMyAdmin 上 运行 一些 SQL。
我的 table 有以下字段:
address
firstname
joindate
memid
recommendedby
surname
telephone
zipcode
recommendedby
字段包含成员 ID。我想按姓名 select 成员,并按姓名列出推荐他们的人。我尝试使用子查询和自连接来做到这一点:
SELECT CONCAT(surname, ", ", firstname),
(SELECT CONCAT(m1.firstname, " ", m1.surname)
FROM Members as m1
INNER JOIN Members as m2
ON m1.memid = m2.recommendedby) AS recommendedby
FROM Members
ORDER BY surname, firstname
这会引发错误 #2014 - Commands out of sync; you can't run this command now
。子查询自己干净地运行。有谁知道是什么导致了这里的错误?
如果没有 join
:
SELECT CONCAT(m.surname, ', ', m.firstname),
(SELECT CONCAT(m1.firstname, ' ', m1.surname)
FROM Members m1
WHERE m1.memid = m.recommendedby
) AS recommendedby
FROM Members m;
您也可以在外部查询中使用 LEFT JOIN
来执行此操作。但子查询中不需要 JOIN
-- 只有一个相关子句。
我为你的问题创建了一个例子:
CREATE TABLE #Members (
[address] VARCHAR(100),
firstname VARCHAR(100),
joindate VARCHAR(100),
memid int,
recommendedby int,
surname VARCHAR(100),
telephone VARCHAR(100),
zipcode VARCHAR(100),
);
INSERT INTO #Members
([address], firstname,surname,joindate,memid,recommendedby,telephone,zipcode)
VALUES
('adress1','Jack','Ady','2020-01-01',1,null,'0123455','104555'),
('adress2','Harry','Adwell','2020-01-02',2,3,'0123445455','1075'),
('adress3','John','Age','2020-01-03',3,4,'0124543455','1450855'),
('adress4','Robert','Ainslie','2020-01-04',4,1,'0124543455','10545055'),
('adress5','Yehuda','Aarons','2020-01-05',5,4,'0124543455','105595'),
('adress6','Michael','Altis','2020-01-01',6,1,'0124543455','1012')
;
select CONCAT(m1.firstname, '-', m1.surname) MemberName,
CONCAT(m2.firstname, '-', m2.surname)recommendedMember
from #Members m1
left join #Members m2 on m1.memid = m2.recommendedby
结果=
MemberName recommendedMember
Jack-Ady Robert-Ainslie
Jack-Ady Michael-Altis
Harry-Adwell -
John-Age Harry-Adwell
Robert-Ainslie John-Age
Robert-Ainslie Yehuda-Aarons
Yehuda-Aarons -
Michael-Altis -