MySQL 左连接与存在子查询返回的行数超出应有的行数

标签 mysql sql database

我有一个 MySQL 数据库和带有子查询的 SQL 查询。

我 100% 确定该表 s_k_p只有一行 s_k_p.season_id = 2s_k_p.user_id = k_i.user_id .

无论如何,问题是LEFT JOIN s_k_p AS skp2部分返回 10 行。如前所述,它应该只返回一行。

SELECT skp2.season_id AS invalid_status_id
FROM comp_i
  INNER JOIN k_i ON k_i.ilmo_id = comp_i.id

  LEFT JOIN s_k_p
    ON s_k_p.user_id = k_i.user_id
       AND s_k_p.season_id = 4

  LEFT JOIN s_k_p AS skp2
    ON skp2.user_id = k_i.user_id
       AND EXISTS (
         SELECT *
           FROM s_k_p
           WHERE s_k_p.season_id = 2
             AND s_k_p.user_id = k_i.user_id
       )
WHERE comp_i.comp_id = ?
ORDER BY k_i.id ASC

表 s_k_p 具有以下行:

season_id | user_id
1 | 25
1 | 459
2 | 459
3 | 459
3 | 9999
4 | 459
4 | 758

第二行是唯一一个 s_k_p.season_id = 2 的行和s_k_p.user_id = k_i.user_id应该是真的。

最佳答案

如果 S_K_P 表中的 USER 有 10 行,则您的查询返回 10 行可能是正确的,因为这是左连接。

您已达到同一个 S_K_P 表的 SECONDARY 级别,但包括 Season_ID = 2。

如果您关心的只是同一用户是否存在第二季,则更改为

 LEFT JOIN s_k_p AS skp2
    ON skp2.user_id = k_i.user_id
    AND skp2.season_id = 2

关于MySQL 左连接与存在子查询返回的行数超出应有的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45165102/

相关文章:

php - 使用php插入mysql

mysql - SQL 查询通过使用不同的特征在一列中添加值来插入新列

database - 在 postgresql 中以图形方式查看数据

mysql - 根据 IF EXIST INSERT 数据

mysql - SQL 看不到别名

mysql - 基本性能比较

php - 获取行直到数量满足

javascript - jQuery函数仅执行一次?

sql - 如何使用 SELECT 语句 sql 在结果中显示 `0` 而不是 NULL?

当我为子查询添加别名时,MySQL如何重用选择列别名?