2015-01-28 2 views
1

Я хочу, чтобы выбрать в таблицу Koppels из таблицы "Deelnames" с колоннами "плеер", "гпу", "Wedstrijd", "speelt", "vroeg", "Laat":Неправильная формулировка вложенного оператора select?

  • каждый D1Speler кто играет в определенном матче:
    • "speelt" = -1,
    • значение "Wedstrijd"
  • с каждым из них: 10 D2Spelers, которые подходят ему лучше всего:
    • «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" 

Спасибо, что помогли мне.

Фред Ottenhof

+0

пожалуйста, сообщите об ошибке вы получаете при выполнении команды ВСТАВИТЬ – Shine

ответ

0

UPDATE

Пожалуйста, попробуйте обновленную версию запроса:

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 
+0

Спасибо за это улучшение. После минутного изменения («D2Speler» вместо «D2.Speler») запрос выполнялся. Это привело к 10 записям, соответствующим «Пределу 10». –

+0

Единственная оставшаяся проблема заключается в том, что Limit теперь применяется к D1 вместо D2. У меня есть около 80 различных D1.Spelers, и с каждым я хочу, чтобы 10 D2.Spelers лучше всего подходят. Должно появиться около 800 записей. Как я могу достичь этого эффекта? –

+0

Я попытался использовать ваше предложение: потянул ORDER BY и LIMIT 10 в D2 Select. См. Перефразированный запрос выше. Теперь я получаю сообщение об ошибке «неизвестный столбец D1.vroeg (или D1.vroeg) в WHERE claus». Кажется, мы почти там. Как обратиться к внешнему миру из D2 Select? –

Смежные вопросы