I have the following query:

select concat(weight, ' ', ids, '\n')
from (
  select
    tableid,
    tupleid,
    group_concat(id separator ' ') as ids,
    (
      select count(*)
      from (
        select transactionid
        from transactionlog
        where (tableid, tupleid, querytype) =
              (t.tableid, t.tupleid, 'update')
        group by transactionid
        having count(*) > 0
      ) v
    ) weight
  from transactionlog t
  group by tableid, tupleid
  having weight > 0 and count(*) > 1
) u;

However, mysql complains about the reference to t from the innermost query:

ERROR 1054 (42S22): Unknown column 't.tableid' in 'where clause'

Why is this an error? Is this a bug? The MySQL docs on scoping rules
don't say anything about this. I was able to suppress the error with
this hack rewrite:

select concat(weight, ' ', ids, '\n')
from (
  select
    tableid,
    tupleid,
    group_concat(id separator ' ') as ids,
    (
      select count(distinct transactionid)
      from transactionlog
      where transactionid in (
        select transactionid
        from transactionlog
        where (tableid, tupleid, querytype) =
              (t.tableid, t.tupleid, 'update')
        group by transactionid
        having count(*) > 0
      )
    ) weight
  from transactionlog t
  group by tableid, tupleid
  having weight > 0 and count(*) > 1
) u;

I'm not sure if this creates an additional unnecessary join, though --
trying to make sense of the output of EXPLAIN has been a separate
exercise in frustration all to itself (even with mk-visual-explain).
Thanks in advance for any answers.
-- 
Yang Zhang
http://www.mit.edu/~y_z/

-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql?unsub=arch...@jab.org

Reply via email to