错误地删除嵌套的select语句?

时间:2015-01-28 23:25:38

标签: mysql sql select nested derived

我想从表格“Deelnames”中选择表格Koppels,其中包含“Speler”,“hcp”,“Wedstrijd”,“speelt”,“vroeg”,“laat”列:

  • 每个参加某场比赛的D1Speler:
    • “speelt”= -1,
    • “Wedstrijd”的价值
  • 每个人:最适合他的10个D2Speler:
    • “speelt”,“Wedstrijd”与D1相同,
    • “vroeg”,“laat”没有违反,
    • 所有候选对偶的D1hcp和D2hcp之间的最小差异。

无论我编写什么,我都会收到回复“每个派生表必须有自己的别名”

请告诉我如何正确拼写MySQL。

INSERT INTO Koppels (
    D1Speler, D1Hcp, D1vroeg, D1laat, 
    D2Speler, D2Hcp, D2vroeg, D2laat)
SELECT 
   D1.Speler AS D1Speler, D1.hcp As D1Hcp, D1.vroeg AS D1vroeg, D1.laat AS D1laat,
   D2Speler, D2Hcp, D2vroeg, D2laat
FROM 
   Deelnames AS D1,
     (Select Speler AS D2Speler, hcp AS D2Hcp, vroeg AS D2vroeg, laat AS D2laat, Wedstrijd, speelt 
        FROM Deelnames
        WHERE D1.Speler <> Speler
        AND speelt=-1
        AND Wedstrijd = "M01"
        AND NOT ((D1.vroeg =-1 AND laat =-1) OR (D1.laat=-1 AND vroeg = -1))
        ORDER BY ABS(D1.hcp-hcp) ASC
        LIMIT 10)
WHERE 
       D1.speelt=-1
   AND D1.Wedstrijd="M01"

感谢您帮助我。

弗雷德奥滕霍夫

1 个答案:

答案 0 :(得分:0)

<强>更新

请尝试查询的更新版本:

INSERT INTO Koppels (
    D1Speler, D1Hcp, D1vroeg, D1laat, 
    D2Speler, D2Hcp, D2vroeg, D2laat)
SELECT 
   D1.Speler AS D1Speler, D1.hcp As D1Hcp, D1.vroeg AS D1vroeg, D1.laat AS D1laat,
   D2.D2Speler, D2.D2Hcp, D2.D2vroeg, D2.D2laat
FROM
    Deelnames AS D1
    INNER JOIN
    (
        SELECT 
           _tmp_D1.Speler AS _tmp_D1_Speler,
           _tmp_D1.hcp AS _tmp_D1_hcp,
           _tmp_D2._tmp_D2_Wedstrijd,
           _tmp_D2._tmp_D2_speelt,
           _tmp_D2.D2Speler, _tmp_D2.D2Hcp, _tmp_D2.D2vroeg, _tmp_D2.D2laat
        FROM 
           Deelnames AS _tmp_D1
           INNER JOIN 
           (    
                Select 
                    Speler AS D2Speler, 
                    hcp AS D2Hcp, 
                    vroeg AS D2vroeg, 
                    laat AS D2laat, 
                    Wedstrijd AS _tmp_D2_Wedstrijd, 
                    speelt AS _tmp_D2_speelt
                FROM 
                    Deelnames
                WHERE 
                    speelt=-1
                    AND Wedstrijd = "M01"
            ) AS _tmp_D2 
                ON _tmp_D1.Speler <> _tmp_D2.D2Speler
                   AND NOT ((_tmp_D1.vroeg =-1 AND _tmp_D2.D2laat =-1) OR (_tmp_D1.laat=-1 AND _tmp_D2.D2vroeg = -1))
                   AND _tmp_D1.speelt = _tmp_D2._tmp_D2_speelt
                   AND _tmp_D1.Wedstrijd = _tmp_D2._tmp_D2_Wedstrijd
        ORDER BY 
            ABS(_tmp_D1.hcp-_tmp_D2.D2hcp) ASC
        LIMIT 10
    ) AS D2
        ON D1.Speler = D2._tmp_D1_Speler
           AND D1.speelt = D2._tmp_D2_speelt
           AND D1.Wedstrijd = D2._tmp_D2_Wedstrijd  
           AND D1.hcp = D2._tmp_D1_hcp