MySQL查询中的基数违规错误。

8
我在这个查询中遇到了一个错误:
SELECT i.name, i.surname, (SELECT u.username FROM user u WHERE u.info_id IN (1,9,10,15,25,40,42,43,44)) as email FROM `userinfo` i WHERE i.id IN (1,9,10,15,25,40,42,43,44)

错误:

基数冲突:1242 子查询返回多于 1 行

我知道这可以通过使用 JOIN 语句来解决,但我不知道如何解决。

为了更清楚地阐明我的问题,我有两个表格,用户和用户信息:

用户

id info_id username

用户信息

id name surname 
< p > user表中的info_id行与userinfo表的id相关,因此如果有一个以这种格式(1,4,7,8,9)给出的userinfo id列表,我希望能够返回匹配的user用户名和userinfo的名字和姓氏。


(SELECT u.username FROM user u WHERE u.info_id IN (1,9,10,15,25,40,42,43,44)) 返回多个项目,无法处理。 - zipser
4个回答

12

你需要在相关子查询中指定两个表之间的关系。

SELECT  i.name, 
        i.surname, 
        (
            SELECT  u.username 
            FROM    user u 
            WHERE   u.info_id = i.id) as email 
FROM    userinfo i 
WHERE   i.id IN (1,9,10,15,25,40,42,43,44)

通过使用JOIN我更喜欢这种方法

SELECT  i.name, 
        i.surname, 
        u.username as Email
FROM    userinfo i 
        INNER JOIN user u 
            ON u.info_id = i.id
WHERE   i.id IN (1,9,10,15,25,40,42,43,44)

为了进一步了解关联操作,请访问下面的链接:


你为什么更喜欢使用JOIN语法? - B Seven

2
你只能在字段列表中返回一行。看起来你想对结果进行分组。
SELECT
    i.name, i.surname,
    GROUP_CONCAT(u.username) AS email
FROM
    userinfo i
    JOIN user u ON (i.id = u.info_id)
WHERE
    i.id IN (1,9,10,15,25,40,42,43,44)
GROUP BY
    i.id

1
SELECT i.name, i.surname, u.username as email 
FROM `userinfo` i 
     INNER JOIN
     `user` u ON i.info_id=u.id
WHERE i.id IN (1,9,10,15,25,40,42,43,44)

学会使用连接操作,如果没有连接操作,你就像双手被绑在背后、蒙上眼睛一样工作。连接操作是如何使用关系数据库中的关系部分。

最紧凑但易读的事实是,不知道Joins就像双手被绑在背后一样工作。 - edmundo096

0

您的意思是:

SELECT i.name, i.surname, (SELECT u.username FROM user u WHERE u.id IN (1,9,10,15,25,40,42,43,44)) as email

FROM `userinfo` i

WHERE i.id IN (1,9,10,15,25,40,42,43,44)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接