我有一个 MySQL 数据库和带有子查询的 SQL 查询。
我 100% 确定该表 s_k_p
只有一行 s_k_p.season_id = 2
和s_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/