如何使用子查询允许多行返回?

时间:2019-05-22 19:20:50

标签: mysql sql

我正在尝试输出处于活动状态的字符的名字和名字。一次只能激活四个字符,因此

SELECT firstname,secondname FROM characters

不正确。

当我执行此SQL命令时:

SELECT firstname,secondname FROM characters WHERE charID=(SELECT charID FROM activechar)

错误:

mysql.connector.errors.DataError: 1242 (21000): Subquery returns more than 1 row

我的表格如下:

character table

activechar table

2 个答案:

答案 0 :(得分:0)

您只需要使用IN运算符:

SELECT firstname,secondname FROM characters WHERE charID IN (SELECT charID FROM activechar)

子查询可以继续返回多行,但是您的主查询将能够为它们查询。

答案 1 :(得分:0)

您可以继续使用=的子查询切换IN,这将检查子查询返回的集合中是否包含左操作数。但是使用IN的子查询通常效果不佳。使用INNER JOIN(仅返回两个表中的行,且ON子句中的条件为true)可能是一个更好的选择。

SELECT c.firstname,
       c.secondname
       FROM characters c
            INNER JOIN activechar ac
                       ON ac.charid = c.charid;