0

我有两个查询:

  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

输入来自第一个查询,输出来自第二个。

编辑 2

查询需要生成财务输入/输出报告,因此,第一个查询获取存储的所有输入,第二个查询生成所有输出,两者都来自一个时期。我需要生成一个包含所有输入和输出的列表,按日期排序。

Edit 3

我已经完成了这个查询,问题是,我怎么知道什么时候输入,什么时候输出?

试过ISNULLand 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
)

顺便说一句,如果您从这两个集合中删除重复项,您将获得更好的性能,UNION ALLUNION在这种情况下您将不会拥有这些重复项。

于 2012-05-18T20:16:02.940 回答