Mysql 为什么子查询返回的行数超过1行

Mysql 为什么子查询返回的行数超过1行,mysql,Mysql,我希望不显示但出现错误的行子查询返回多行 这很好用 SELECT CONCAT( P.LastName, ', ', P.FirstName ) AS Name, ( SELECT MP.MembershipID FROM membershipperson MP WHERE MP.PersonID = P.PersonID ) AS MembershipID, PersonID FROM `person` P 当我通过'MembershipID'添加订单时,此操作失败。如果我通过'Pers

我希望不显示但出现错误的行子查询返回多行

这很好用

SELECT CONCAT( P.LastName, ', ', P.FirstName ) AS Name, 
(
SELECT MP.MembershipID
FROM membershipperson MP
WHERE MP.PersonID = P.PersonID
) 
AS MembershipID, PersonID
FROM `person` P
当我通过'MembershipID'添加订单时,此操作失败。如果我通过'PersonID'进行订单,则此操作有效

SELECT CONCAT( P.LastName, ', ', P.FirstName ) AS Name, 
(
SELECT MP.MembershipID
FROM membershipperson MP
WHERE MP.PersonID = P.PersonID
) 
AS MembershipID, PersonID
FROM `person` P
ORDER BY `MembershipID` ASC 

如何获取包含所有MembershipID行的列表?

您可能应该使用内部联接。大概是这样的:

SELECT CONCAT( P.LastName, ', ', P.FirstName ) AS Name, MP.MembershipID AS MembershipID, PersonID
FROM person P, membershipperson MP
WHERE MP.PersonID = P.PersonID

使用子查询是否重要?您可以使用
内部联接编写它

SELECT
    CONCAT( P.LastName, ', ', P.FirstName ) AS Name,
    MP.MembershipID,
    P.PersonID
FROM `person` P
INNER JOIN `membershipperson` MP ON MP.PersonID = P.PersonID
ORDER BY MP.MembershipID ASC 

我没有看到内部连接。这是我得到的;字段列表中的“PersonID”列不明确。内部联接是隐式的。如果您明确地想要它:选择CONCAT(P.LastName,,,,P.FirstName)作为Name,MP.MembershipID作为MembershipID,PersonID来自person P内部加入membershipperson MP ON MP.PersonID=P.PersonID,这将导致严重失败。如果你喜欢,我可以和你分享,但是消息很长。你使用的是什么数据库管理系统?我在字段列表中得到的PersonID是什么ambigous@user3066675-您确定已正确复制查询吗?此查询中的每一列都使用表别名进行了限定。您的权利我错过了一些东西,它似乎为我提供了我现在正在寻找的内容。。。谢谢,我在发布SQL几秒钟后编辑了它,所以无论如何都应该显示出来。我可能也像José一样,第一次复制PersonID时没有对其进行限定。