2017-07-27 20 views
-1

で、私はその構造を持つテーブルを持っている:SQLを選択し、再帰的に同じテーブル

pedido_venda_restaurante

  • idpedido_venda_restaurante、インデックスPK

  • idpedido_venda_restaurante_principal、FK(ポイントidpedido_venda_restauranteへ同じテーブルの)

  • codigo_pv_interno varchar型UNIQUE


私は目的は、クエリがすべての行を返す必要があり、ユーザが入力したcodigo_pv_internoであるの問い合わせ製:

  • codigo_pv_internoが入力したが、
  • idpedido_venda_restaurante_principalは、codigo_pv_internoが入力された行のidpedido_venda_restaurante_principalと等しくなります。
  • idpedido_venda_restaurante_principalは、codigo_pv_internoが入力された行のidpedido_venda_restauranteと等しくなります。 (存在する場合)、クエリが

    SELECT 
        idpedido_venda_restaurante 
        ,codigo_pv_interno 
        ,idpedido_venda_restaurante_principal 
    FROM pedido_venda_restaurante 
    WHERE idpedido_venda_restaurante IN (SELECT 
         pedido_origem.idpedido_venda_restaurante 
        FROM pedido_venda_restaurante AS pedido_origem 
        WHERE pedido_origem.codigo_pv_interno = '003') 
    OR idpedido_venda_restaurante IN (SELECT 
         idpedido_venda_restaurante 
        FROM pedido_venda_restaurante 
        WHERE idpedido_venda_restaurante_principal = (SELECT 
          idpedido_venda_restaurante_principal 
         FROM pedido_venda_restaurante 
         WHERE codigo_pv_interno = '003')) 
    OR idpedido_venda_restaurante IN (SELECT 
         idpedido_venda_restaurante 
        FROM pedido_venda_restaurante 
        WHERE idpedido_venda_restaurante = (SELECT 
          idpedido_venda_restaurante_principal 
         FROM pedido_venda_restaurante 
         WHERE codigo_pv_interno = '003')) 
    OR idpedido_venda_restaurante_principal = (SELECT 
         pedido_origem.idpedido_venda_restaurante 
        FROM pedido_venda_restaurante AS pedido_origem 
        WHERE pedido_origem.codigo_pv_interno = '003'); 
    

    実はこのクエリがすでに動作し、リターン(存在する場合)(存在する場合)、、、父親が子どもを自分自身を返し、兄弟なければならないことを意味

SQLの私の知識が少ないため、それを行う効率的な方法が存在するはずです。

+0

を検索したい他のテーブルとのプロセスを参照してください:[なぜ私が提供しなければなりません非常に単純なSQLクエリであると思われるMCVE?](https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to -me-to-be-a-very-simple-sql-query) – Strawberry

答えて

0

あなたは要素がテーブルに存在するかどうかをチェックするために、JOIN INNERを使用することができます。

SELECT pvr.idpedido_venda_restaurante, pvr.codigo_pv_interno, pvr.idpedido_venda_restaurante_principal 
FROM pedido_venda_restaurante pvr 
INNER JOIN pedido_venda_restaurante as pedido_origem 
ON pedido_origem.idpedido_venda_restaurante = pvr.idpedido_venda_restaurante 
WHERE pvr.pedido_origem.codigo_pv_interno = '003' 

繰り返しを使用すると、値

関連する問題