【问题标题】:Cardinality violation on mysql querymysql查询的基数违规
【发布时间】:2013-03-23 02:46:08
【问题描述】:

我在这个查询中遇到错误:

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 

user 中的 info_id 行与userinfo 的 id 相关,因此有一个这种格式的用户信息 id 列表 (1,4,7,8,9) 我想要姓名和姓氏(来自 @987654326 @) 和 user 中匹配 info_id 的用户名

【问题讨论】:

  • (SELECT u.username FROM user u WHERE u.info_id IN (1,9,10,15,25,40,42,43,44))返回多于一项,无法处理。

标签: mysql sql


【解决方案1】:

需要在相关子查询中指定两张表的关系,

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)

如需进一步了解联接,请访问以下链接:

【讨论】:

【解决方案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

【讨论】:

    【解决方案3】:
    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 的事实是双手被绑在背后
    【解决方案4】:

    你的意思是:

    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)
    

    【讨论】:

      猜你喜欢
      • 2018-03-26
      • 1970-01-01
      • 2023-01-30
      • 1970-01-01
      • 2016-10-13
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 2011-01-30
      相关资源
      最近更新 更多