如何使用左联接上的查询将 RAW SQL 转换为 DQL



我遇到了一个小问题...我在SQL上创建了一个完美运行的查询。

我需要一列关于查询结果的列,它告诉我此行是否存在于另一行中,并按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上出现问题。

这是我的实际 DQL:

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

它看起来好像教义无法理解这个问题。这是错误:

[语义错误] 第 0 行,第 206 行靠近 '(选择 标识(ma.usuario_id(":错误:未定义类"("。

有人可以帮助我了解如何使用带有 Doctrine 的 JOIN 查询吗?我需要它与KNPPaginationBundle一起使用。它不适用于原始SQL。

尽量不使用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

另外,如果您展示您的实体,我可以改进连接。

相关内容

  • 没有找到相关文章

最新更新