Warning: count(): Parameter must be an array or an object that implements Countable in /home/pasokime/domains/mysql.lt/public_html/forumas/include/parser.php on line 820

1 (edited by neworld 2008-01-12 19:30:56)

Topic: Neveikia užklausa, gal galima kaip nors kitaip?

Užklausa:

DELETE FROM nw_alliance_member WHERE id IN (
  SELECT t1.id
  FROM nw_alliance_member AS t1
  LEFT JOIN nw_login AS t2 ON t2.id = t1.user
  WHERE t2.id IS NULL
)

man gražina klaida #1093 - You can't specify target table 'nw_alliance_member' for update in FROM clause

užklausa:

  SELECT t1.id
  FROM nw_alliance_member AS t1
  LEFT JOIN nw_login AS t2 ON t2.id = t1.user
  WHERE t2.id IS NULL

gražina reikiamus rezultatus, kuriuos aš turiu ištrinti.

Gal galima kaip nors kitaip perrašyti?

http://bugs.mysql.com/bug.php?id=3327  bet nesugalvoju kai pperrašyti užklausą kitaip

Re: Neveikia užklausa, gal galima kaip nors kitaip?

Esmė tokia: negalima toje pačioje užklausoje trinti (DELETE) ir rinkti (SELECT) eilutes iš tos pačios lentelės.

Tavo atveju sprendimas manau yra - reikia trinimo užklausą perrašyti su sujungimu:

DELETE FROM nw_alliance_member
  LEFT JOIN nw_login ON nw_alliance_member.user = nw_login.id
WHERE nw_login.id IS NULL

Daugiau info: http://dev.mysql.com/doc/refman/4.1/en/delete.html

Re: Neveikia užklausa, gal galima kaip nors kitaip?

kažkaip akys neužkliuvo už tai kad JOIN galima ir delete sakiniuose naudot.