2017-02-11 10 views
0

私は小さな問題があります...私は完璧に動作するSQLのクエリを作成しました。LEFT SQLをDQLに変換する方法LEFT JOIN

この行が別の行に存在し、user_idでグループ化されているかどうかがわかります。

select u.*, 
    case when m.usuario_id = u.id 
    then 1 
    else 0 
    end as posicionado 
from usuario u 
left join (select usuario_id from matriz where matriz = 1) as m 
on u.id = m.usuario_id group by u.id 

しかし、私はDQLを行う変換しようとすると、それはleft join (selectに問題を与える:

これは、現時点では私のクエリです。

SELECT u, 
    CASE WHEN IDENTITY(m.usuario) = u.id 
     THEN 1 
     ELSE 0 
    END AS posicionado 
    FROM AppBundle:Usuario u 
    LEFT JOIN (SELECT IDENTITY (ma.usuario_id) FROM AppBundle:Matriz ma WHERE ma.matriz = 1) as m ON u.id = m.usuario_id group by u.id 

それはDoctrineはそのクエリを理解するカント場合のようにseens:

は、ここに私の実際のDQLです。これはエラーです:

[Semantical Error] line 0, col 206 near '(SELECT IDENTITY(ma.usuario_id)': Error: Class '(' is not defined.

誰かがDoctrineでJOINを使用する方法を理解するのを助けることができますか? KNPPaginationBundleで使用する必要があります。また、生のSQLでは動作しません。

答えて

0

Identity機能を使用しないでください。あなたはMatrizから選択しているので、それは必要ありません。しかし、私は内部選択を削除し、以下のように使用します:

SELECT u, 
CASE WHEN IDENTITY(m.usuario) = u.id 
    THEN 1 
    ELSE 0 
END AS posicionado 
FROM AppBundle:Usuario u 
LEFT JOIN AppBundle:Matriz ma ON ma.matriz = 1 AND m.usario_id = u.id 
group by u.id 

また、エンティティを表示すると、結合を改善できます。