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 

来自的 info_id 行user与 的 id 相关userinfo,因此有一个以这种格式 (1,4,7,8,9) 的 userinfo id 列表,我希望 name 和 surname (from userinfo) 和用户名user与 info_id 匹配

4

4 回答 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)

要进一步了解有关联接的更多信息,请访问以下链接:

于 2013-04-01T23:12:13.920 回答
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
于 2013-04-01T23:12:42.287 回答
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)

学习使用连接,没有它们,您将双手绑在背后并蒙住眼睛。连接是如何使用关系数据库的关系部分。

于 2013-04-01T23:12:27.460 回答
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)
于 2013-04-01T23:15:43.163 回答