On Thu, 15 May 2014 18:02:43 +0300
Paul <de...@ukr.net> wrote:

> > update adla1 set PFLOPF=(SELECT pflopf from adl where
> > adla1.ref=adl.ref) where select count(adl.ref) from adl=1;
> 
> A bit optimized version...
> 
> UPDATE adla1 
> SET pflopf = (SELECT pflopf FROM adl WHERE adl.ref = adla1.ref) 
> WHERE (SELECT COUNT(*) FROM (SELECT 1 FROM adl WHERE adl.ref =
> adla1.ref LIMIT 2)) = 1;

UPDATE adla1 
SET pflopf = (
    SELECT pflopf 
    FROM adl 
    WHERE adl.ref = adla1.ref) 
WHERE (
      SELECT COUNT(*) 
      FROM (
           SELECT 1 FROM adl 
           WHERE adl.ref = adla1.ref 
           LIMIT 2
        )
    ) = 1;

Not all sure what LIMIT 2 does there.  I think a SQL-92 version
would be

UPDATE adla1 
SET pflopf = (
    SELECT max(pflopf) 
    FROM adl 
    WHERE ref = adla1.ref 
    group by ref
)
WHERE exists (
    select 1
    FROM adl 
    WHERE ref = adla1.ref 
    group by ref
    having count(*) = 1
);

It would be nice to use a CTE for the subqueries, but afaik that's not
possible.  

--jkl
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to