On Thu, 16 Jan 2014 09:47:58 -0500
Igor Tandetnik <i...@tandetnik.org> wrote:

> On 1/16/2014 5:21 AM, Rob Golsteijn wrote:
> > SELECT * FROM C
> >      LEFT JOIN A ON A.a*A.a + B.b*B.b = C.c*c.c
> >      LEFT JOIN B ON A.a*A.a + B.b*B.b = C.c*c.c;
> 
> I'm not sure how SQLite interprets this query. In any case, it
> doesn't make much sense. I suspect you are looking for something like
> this:
> 
> SELECT * FROM A, B, C
> WHERE A.a*A.a + B.b*B.b = C.c*C.c;

That eliminates rows that don't meet the WHERE.  

I think what's intended is

        select a, b, c from C 
        left join (
                select a, b
                from A cross join B 
                where a <= b -- <== would eliminate duplicates
        ) as AB
        on a*a + b*b = c*c;

which is easier to read if you ask me.  I don't know if it executes
faster. For those who understand it, here's the EXPLAIN output:

addr   opcode      p1     p2     p3     p4          p5
-----  -----       -----  -----  -----  -----       -----
0      Trace       0      0      0      00
1      Integer     21     1      0      00
2      Once        0      21     0      00
3      OpenEpheme  1      2      0      00
4      Goto        0      46     0      00
5      OpenRead    2      2      0      1           00
6      OpenRead    3      3      0      1           00
7      Rewind      2      19     0      00
8      Rewind      3      18     0      00
9      Column      2      0      2      00
10     Column      3      0      3      00
11     Gt          3      17     2      collseq(BI  6b
12     Column      2      0      4      00
13     Column      3      0      5      00
14     MakeRecord  4      2      3      00
15     NewRowid    1      2      0      00
16     Insert      1      3      2      08
17     Next        3      9      0      01
18     Next        2      8      0      01
19     Close       2      0      0      00
20     Close       3      0      0      00
21     Return      1      0      0      00
22     OpenRead    0      4      0      1           00
23     Rewind      0      44     0      00
24     Integer     0      6      0      00
25     Rewind      1      40     0      00
26     Column      1      0      9      00
27     Multiply    9      9      8      00
28     Column      1      1      11     00
29     Multiply    11     11     10     00
30     Add         10     8      7      00
31     Column      0      0      8      00
32     Multiply    8      8      10     00
33     Ne          10     39     7      6a
34     Integer     1      6      0      00
35     Column      1      0      13     00
36     Column      1      1      14     00
37     Column      0      0      15     00
38     ResultRow   13     3      0      00
39     Next        1      26     0      01
40     IfPos       6      43     0      00
41     NullRow     1      0      0      00
42     Goto        0      34     0      00
43     Next        0      24     0      01
44     Close       0      0      0      00
45     Halt        0      0      0      00
46     Transactio  0      0      0      00
47     VerifyCook  0      3      0      00
48     TableLock   0      2      0      A           00
49     TableLock   0      3      0      B           00
50     TableLock   0      4      0      C           00
51     Goto        0      5      0      00

--jkl


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

Reply via email to