0

他の投稿をいくつか読みましたが、私の質問に完全に回答するものはありませんでした。

次の選択を生成することができました:

SELECT regions.id, regions.name, auditoria_status from regions
LEFT OUTER JOIN regions regions_regions ON regions_regions.id = regions.parent_id
JOIN(
    SELECT auditoria.entidade_id, auditoria.entidade_tipo, MAX(auditoria.status) AS auditoria_status 
    from auditoria GROUP BY auditoria.entidade_id, auditoria.entidade_tipo
) AS a
ON a.entidade_id = regions.id AND a.entidade_tipo = 'Terceiro' ORDER BY regions.id

これにより、すべての地域が正しく一覧表示されます。しかし、auditoria_status によって、auditoria.status の最大値が得られることを期待していました。

リージョン レコードの 1 つには、オーディトリアム テーブルに 3 つのエントリがあります。1 つはステータス 0、もう 1 つはステータス 1、3 番目はステータス 2 です。このリージョン ID を取得することを期待していました。これは名前であり、auditoria_status であるため 2 ですが、0 が返されます。

私の目標は、すべてのリージョンを (繰り返しなしで) リストすることですが、そのリージョンのテーブル オーディトリアムの最大ステータスのみを表示します。

編集

わかりました、この SQL は実際に機能します。ここのダミーの人は、「Terceiro」ではなく「Region」であるべき entidade_tipo 条件を間違って入力しました。だから、それは動作します。

4

1 に答える 1

1

サブクエリに参加しただけで、実際にはそれによってフィルタリングしませんでした。

私があなたの質問を正しく理解していて、必要なものがその ID、名前、および最大ステータスだけである場合は、次のようにすることができます。

SELECT
   regions.*, a.max_status
FROM
   regions
JOIN
   (SELECT id, MAX(status) as max_status
    FROM auditoria WHERE entidade_tipo = 'Terceiro'
    GROUP BY id) AS a 
 ON
   regions.id = a.id
ORDER BY regions.id
于 2013-01-04T17:14:11.773 に答える