2013-04-04 2 views
0

Следующая инструкция SQL задает пользовательскую переменную @id, которую я затем использую в трейлинг-подзапросе. Моя проблема заключается в том, что переменная @id получает только первые items.id в наборе результатов, а не «за строку», поэтому результат из подзапроса одинаковый для каждой строки основного выбора. Кто-нибудь знает, есть ли способ сбросить переменную @id для каждой строки?установить переменную пользователя mysql для каждой строки?

select 
     items.id 
     ,items.title 
     ,@id := items.id 
     ,(
      select 
       group_concat(x.y) 
      from 
       (
        select 
         group_concat(ledger.stockcode) as y 
        from 
         ledger 
        where 
         @id = ledger.itemid 
        group by 
         ledger.stockcode 
        having 
         sum(ledger.stockqty) > 0 
       ) as x 
      ) as extras 
    from 
     items 
    where 
     items.id = 196 

ответ

0

Попробуйте этот запрос

select 
    a.id 
    ,a.title 
    ,b.y as extras 
from 
    items a 
inner join 
    (select 
     group_concat(ledger.stockcode) as y 
    from 
     ledger 
    where 
     ledger.itemid = 196 
    group by 
     ledger.stockcode 
    having 
     sum(ledger.stockqty) > 0) b 
on 
    a.id = 196 AND a.id = b.itemid