Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 简单的SQL连接查询(我想)_Mysql_Sql - Fatal编程技术网

Mysql 简单的SQL连接查询(我想)

Mysql 简单的SQL连接查询(我想),mysql,sql,Mysql,Sql,有人能告诉我为什么我在使用完全联接时,在“where子句”中出现错误:未知列“cdu\u user\u progress.uid”,但在仅使用联接时却没有?我正在使用MySQL SELECT cdu_lessons.*, SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN game_id = 0 THEN score END ORDER BY date), ',', 1) AS game0_first, MAX(CASE WHEN game_

有人能告诉我为什么我在使用完全联接时,在“where子句”中出现错误:未知列“cdu\u user\u progress.uid”,但在仅使用联接时却没有?我正在使用MySQL

SELECT 
    cdu_lessons.*, 
    SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN game_id = 0 THEN score END ORDER BY date), ',', 1) AS game0_first,
    MAX(CASE WHEN game_id = 0 THEN score END) AS game0_max,
    SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN game_id = 1 THEN score END ORDER BY date), ',', 1) AS game1_first,
    MAX(CASE WHEN game_id = 1 THEN score END) AS game1_max,
    SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN game_id = 2 THEN score END ORDER BY date), ',', 1) AS game2_first,
    MAX(CASE WHEN game_id = 2 THEN score END) AS game2_max,
    SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN game_id = 3 THEN score END ORDER BY date), ',', 1) AS game3_first,
    MAX(CASE WHEN game_id = 3 THEN score END) AS game3_max,
    SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN game_id = 4 THEN score END ORDER BY date), ',', 1) AS game4_first,
    MAX(CASE WHEN game_id = 4 THEN score END) AS game4_max,
    SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN game_id = 5 THEN score END ORDER BY date), ',', 1) AS game5_first,
    MAX(CASE WHEN game_id = 5 THEN score END) AS game5_max     
FROM cdu_user_progress 
FULL JOIN cdu_lessons ON cdu_lessons.id = cdu_user_progress.lesson_id 
WHERE cdu_user_progress.uid = 145 
GROUP BY lesson_id

MySQL缺乏对完全外部连接的支持

因此,如果您想在MySQL上模拟完全连接,请看一看

通常建议的解决方法如下所示:

   SELECT 
        cdu_lessons.*, 
        SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN game_id = 0 THEN score END ORDER BY date), ',', 1) AS game0_first,
        MAX(CASE WHEN game_id = 0 THEN score END) AS game0_max,
        SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN game_id = 1 THEN score END ORDER BY date), ',', 1) AS game1_first,
        MAX(CASE WHEN game_id = 1 THEN score END) AS game1_max,
        SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN game_id = 2 THEN score END ORDER BY date), ',', 1) AS game2_first,
        MAX(CASE WHEN game_id = 2 THEN score END) AS game2_max,
        SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN game_id = 3 THEN score END ORDER BY date), ',', 1) AS game3_first,
        MAX(CASE WHEN game_id = 3 THEN score END) AS game3_max,
        SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN game_id = 4 THEN score END ORDER BY date), ',', 1) AS game4_first,
        MAX(CASE WHEN game_id = 4 THEN score END) AS game4_max,
        SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN game_id = 5 THEN score END ORDER BY date), ',', 1) AS game5_first,
        MAX(CASE WHEN game_id = 5 THEN score END) AS game5_max     
    FROM cdu_user_progress 
    LEFT JOIN cdu_lessons ON cdu_lessons.id = cdu_user_progress.lesson_id 
    WHERE cdu_user_progress.uid = 145 
    GROUP BY lesson_id

Union ALL

    SELECT 
        cdu_lessons.*, 
        SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN game_id = 0 THEN score END ORDER BY date), ',', 1) AS game0_first,
        MAX(CASE WHEN game_id = 0 THEN score END) AS game0_max,
        SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN game_id = 1 THEN score END ORDER BY date), ',', 1) AS game1_first,
        MAX(CASE WHEN game_id = 1 THEN score END) AS game1_max,
        SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN game_id = 2 THEN score END ORDER BY date), ',', 1) AS game2_first,
        MAX(CASE WHEN game_id = 2 THEN score END) AS game2_max,
        SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN game_id = 3 THEN score END ORDER BY date), ',', 1) AS game3_first,
        MAX(CASE WHEN game_id = 3 THEN score END) AS game3_max,
        SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN game_id = 4 THEN score END ORDER BY date), ',', 1) AS game4_first,
        MAX(CASE WHEN game_id = 4 THEN score END) AS game4_max,
        SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN game_id = 5 THEN score END ORDER BY date), ',', 1) AS game5_first,
        MAX(CASE WHEN game_id = 5 THEN score END) AS game5_max     
    FROM cdu_user_progress 
    RIGHT JOIN cdu_lessons ON cdu_lessons.id = cdu_user_progress.lesson_id 
    WHERE cdu_user_progress.uid = 145 
    GROUP BY lesson_id

mysql中不支持
完全连接
,至少不支持直接从cdu\u user\u progress进行

完全连接…
被解释为来自cdu的
\u用户\u进度为完全
。 本质上,它用别名FULL替换表名