0

2つのクエリがあります:

  SELECT LancamentoEntrada.*,
         TipoEntrada.descricao AS nome,
         Usuario.nome AS obreiro
    FROM lancamento_entradas LancamentoEntrada,
         tipo_entradas TipoEntrada,
         obreiros Obreiro,
         usuarios Usuario
   WHERE LancamentoEntrada.tipo_entrada_id = TipoEntrada.id
     AND TipoEntrada.somar_caixa = 1
     AND LancamentoEntrada.obreiro_id = Obreiro.id
     AND Usuario.id = Obreiro.usuario_id
     AND LancamentoEntrada.data_entrada >= '{$begin}'
     AND LancamentoEntrada.data_entrada <= '{$end}'
ORDER BY LancamentoEntrada.data_entrada

  SELECT LancamentoSaida.*,
         TipoSaida.descricao AS nome
    FROM lancamento_saidas LancamentoSaida,
         tipo_saidas TipoSaida
   WHERE LancamentoSaida.tipo_saida_id = TipoSaida.id
     AND TipoSaida.somar_caixa = 1
     AND LancamentoSaida.data_saida >= '{$begin}'
     AND LancamentoSaida.data_saida <= '{$end}'
ORDER BY LancamentoSaida.data_saida

次の配列を生成します。

// Query 1
Array(
    [0] => Array (
        [id] => 3
        [tipo_entrada_id] => 1
        [data_entrada] => 2012-05-08
        [data_vencimento] => 2012-05-08
        [obreiro_id] => 2
        [valor_pago] => 20.00
        [valor_pagar] => 0.01
        [observacoes] => TESTE
    )

    [1] => Array (
        [...]
    )
)

// Query 2
Array (
    [0] => Array (
        [id] => 1
        [tipo_saida_id] => 1
        [data_saida] => 2012-05-08
        [data_vencimento] => 2012-05-08
        [valor_pago] => 200.00
        [observacoes] => tESTE
    )
    [1] => Array (
        [...]
    )
)

しかし、入力と出力を一覧表示する1つのクエリを実行したいのですが、これをどのように実行できますか?さらに説明が必要な場合は、私に聞いてください。

編集1

入力は最初のクエリから生成され、出力は2番目のクエリから生成されます。

編集2

クエリは財務入出力のレポートを生成する必要があるため、最初のクエリはすべての入力を保存し、2番目のクエリはすべての出力を生成します。どちらも1つの期間からのものです。入力と出力のすべてを日付順に並べたリストを生成する必要があります。

Edit 3

私はこのクエリを実行しましたが、問題は、いつ入力され、いつ出力されるかをどのように知るかです。

試しISNULLてみCASEsましたが、動作しません。

(SELECT LancamentoEntrada.data_entrada AS data,
    LancamentoEntrada.data_vencimento AS vencimento,
    LancamentoEntrada.valor_pago AS valor,
    LancamentoEntrada.observacoes AS observacoes,
    TipoEntrada.descricao AS nome
   FROM lancamento_entradas LancamentoEntrada,
    tipo_entradas TipoEntrada
  WHERE LancamentoEntrada.tipo_entrada_id = TipoEntrada.id
    AND TipoEntrada.somar_caixa = 1
)

UNION

(SELECT LancamentoSaida.data_saida AS data,
    LancamentoSaida.data_vencimento AS vencimento,
    LancamentoSaida.valor_pago AS valor,
    LancamentoSaida.observacoes AS observacoes,
    TipoSaida.descricao AS nome
   FROM lancamento_saidas LancamentoSaida,
    tipo_saidas TipoSaida
  WHERE LancamentoSaida.tipo_saida_id = TipoSaida.id
    AND TipoSaida.somar_caixa = 1
)
4

1 に答える 1

1

それでも必要なのは、どのレコードがどのクエリからのものかを特定することだけである場合は、各クエリにリテラルを追加するだけです。

( SELECT 
      'Input' as rec_type,

     LancamentoEntrada.data_entrada AS data,
    LancamentoEntrada.data_vencimento AS vencimento,
    LancamentoEntrada.valor_pago AS valor,
    LancamentoEntrada.observacoes AS observacoes,
    TipoEntrada.descricao AS nome
   FROM lancamento_entradas LancamentoEntrada,
    tipo_entradas TipoEntrada
  WHERE LancamentoEntrada.tipo_entrada_id = TipoEntrada.id
    AND TipoEntrada.somar_caixa = 1
)

UNION ALL

(SELECT 
      'Output' as rec_type,

      LancamentoSaida.data_saida AS data,
    LancamentoSaida.data_vencimento AS vencimento,
    LancamentoSaida.valor_pago AS valor,
    LancamentoSaida.observacoes AS observacoes,
    TipoSaida.descricao AS nome
   FROM lancamento_saidas LancamentoSaida,
    tipo_saidas TipoSaida
  WHERE LancamentoSaida.tipo_saida_id = TipoSaida.id
    AND TipoSaida.somar_caixa = 1
)

余談ですが、この場合にはない2つのセットから重複を削除すると、UNION ALLパフォーマンスが向上します。UNION

于 2012-05-18T20:16:02.940 に答える