Finalidade: Efetuar SELECT na tabela principal, de registros ainda não incluídos na tabela secundária.
SELECT os.numero,os.data_entrada,os.hora_entrada,os.data_prevista,os.hora_prevista
,cli.nomcli,cli.fancli
,os.responsavel,uso.fantasia,os.status,os.seq_entrega
FROM os_cadastro AS os, cli_cadastro AS cli,usuario_cadastro AS uso
WHERE os.status = '0'
AND os.seq_entrega<>'0000-00-00 00:00:00'
AND os.cli_codigo=cli.codcli
AND os.responsavel=uso.codigo
AND os.digital1440='1'
AND NOT EXISTS (SELECT NULL FROM os_detalhe_andamento WHERE os_detalhe_andamento.numero=os.numero)
SAOliveira
quarta-feira, 26 de fevereiro de 2014
sexta-feira, 13 de dezembro de 2013
Indices em MySql
Índices em MySql são necessários para a performance do banco.
Uma boa forma de verificar esta performance e qual índice o banco está utilizando, é colocar EXPLAIN antes da query a ser executada no seu manipulador de banco preferido.
Abaixe um pequeno exemplo de como criar/recriar índices:
PSQL_Index(xBanco,'tabela','idx_nome_indice',{'campo1','campo2'},Arg1)
**-----------------------------------------------------------------------------**
** Finalidade: criar indices nativos no banco de dados
** Parametros: Conexao = Qual banco vai conectar
** Tabela = tabela que vai criar os indices
** Indice = Nome do indice que vai ser criado
** Campos = Campos no indice
** DeletaIndices = .t. (apaga) ou .f. (nao apaga)
**-----------------------------------------------------------------------------**
FUNCTION PSQL_Index(Conexao,Tabela,Indice,Campos,DeletaIndices)
#include 'fivewin.ch'
**-----------------------------------------------------------------------------**
**--[ verifica se vai deletar os indices existentes ]--**
IF(DeletaIndices)
SQL EXECUTE ("ALTER TABLE `"+Lower(tabela)+"` DROP INDEX `"+Lower(indice)+"`") INTO (conexao)
ENDIF
Uma boa forma de verificar esta performance e qual índice o banco está utilizando, é colocar EXPLAIN antes da query a ser executada no seu manipulador de banco preferido.
Abaixe um pequeno exemplo de como criar/recriar índices:
PSQL_Index(xBanco,'tabela','idx_nome_indice',{'campo1','campo2'},Arg1)
**-----------------------------------------------------------------------------**
** Finalidade: criar indices nativos no banco de dados
** Parametros: Conexao = Qual banco vai conectar
** Tabela = tabela que vai criar os indices
** Indice = Nome do indice que vai ser criado
** Campos = Campos no indice
** DeletaIndices = .t. (apaga) ou .f. (nao apaga)
**-----------------------------------------------------------------------------**
FUNCTION PSQL_Index(Conexao,Tabela,Indice,Campos,DeletaIndices)
#include 'fivewin.ch'
**-----------------------------------------------------------------------------**
**--[ verifica se vai deletar os indices existentes ]--**
IF(DeletaIndices)
SQL EXECUTE ("ALTER TABLE `"+Lower(tabela)+"` DROP INDEX `"+Lower(indice)+"`") INTO (conexao)
ENDIF
**--[ cria indices se nao existente ]--**
IF(At(indice,ToString(SQLArray("SHOW INDEX FROM "+tabela,,Conexao)))==0)
cCampo:=''
FOR X = 1 TO Len(Campos)
IF(Len(Campos)== X)
cCampo+=Lower(Campos[X])
ELSE
cCampo+=Lower(Campos[X])+","
ENDIF
NEXT
cCmd:="CREATE INDEX "+Lower(AllTrim(Indice))+" ON "+Lower(AllTrim(tabela))+" ("+AllTrim(cCampo)+")"
PSQL_Execute(conexao,cCmd,Tabela)
ENDIF
RETURN(NIL)
sexta-feira, 22 de novembro de 2013
domingo, 28 de julho de 2013
xHarbour, Array excluindo e reposicionando registros
Adel(aArray,Item)
aSize(aArray,Len(aArray)-1)
aSort( aArray,,,{|x,y|x[1]<y[1]})
FOR X = 1 TO Len(aArray)
aArray[x,1]:=X
NEXT
aSize(aArray,Len(aArray)-1)
aSort( aArray,,,{|x,y|x[1]<y[1]})
FOR X = 1 TO Len(aArray)
aArray[x,1]:=X
NEXT
MySql, Select adcionado item (tipo recno do dbf)
SELECT @r:=@r+1 AS nreg,registro,codigo,descricao
FROM tabela,(SELECT @r:=0) x
WHERE status='0'
FROM tabela,(SELECT @r:=0) x
WHERE status='0'
sexta-feira, 26 de julho de 2013
MySql - SELECT com IF(condição)
SELECT v.cfs_registro,c.emissao,c.tipo,c.dest_codigo,
IF(c.dest_codigo<999999,d.razao,'Consumidor') AS razao, quantidade,custo,valor,((valor/custo)*100)-100
FROM cfs_itens AS v,cfs_cabec AS c
LEFT JOIN cli_cadastro AS d ON d.registro=c.dest_codigo
WHERE v.codigo=327
AND v.cfs_registro=c.registro
AND c.emissao BETWEEN '2013-07-01' AND '2013-07-31'
IF(c.dest_codigo<999999,d.razao,'Consumidor') AS razao, quantidade,custo,valor,((valor/custo)*100)-100
FROM cfs_itens AS v,cfs_cabec AS c
LEFT JOIN cli_cadastro AS d ON d.registro=c.dest_codigo
WHERE v.codigo=327
AND v.cfs_registro=c.registro
AND c.emissao BETWEEN '2013-07-01' AND '2013-07-31'
quinta-feira, 25 de julho de 2013
MSQL cálculos diretos no SELECT
SELECT cli.razao,cli.mensal_juros
,cab.registro,cab.emissao,cab.nota_total
,(DATEDIFF(CURDATE(),cab.emissao)) AS atrazo_dias
,50.00 AS juros_taxa_mes
,CAST((cab.nota_total*50.00/100)/30 AS DECIMAL(12,2)) AS juros_dia
,CAST((cab.nota_total*50.00/100)/30 AS DECIMAL(12,2))*(DATEDIFF(CURDATE(),cab.emissao)) AS total_juros
,cab.nota_total+CAST((cab.nota_total*50.00/100)/30 AS DECIMAL(12,2))*(DATEDIFF(CURDATE(),cab.emissao)) AS total_pagar
FROM cfs_cabec AS cab, cli_cadastro AS cli
WHERE cab.dest_codigo='101'
AND cab.dest_codigo=cli.registro
,cab.registro,cab.emissao,cab.nota_total
,(DATEDIFF(CURDATE(),cab.emissao)) AS atrazo_dias
,50.00 AS juros_taxa_mes
,CAST((cab.nota_total*50.00/100)/30 AS DECIMAL(12,2)) AS juros_dia
,CAST((cab.nota_total*50.00/100)/30 AS DECIMAL(12,2))*(DATEDIFF(CURDATE(),cab.emissao)) AS total_juros
,cab.nota_total+CAST((cab.nota_total*50.00/100)/30 AS DECIMAL(12,2))*(DATEDIFF(CURDATE(),cab.emissao)) AS total_pagar
FROM cfs_cabec AS cab, cli_cadastro AS cli
WHERE cab.dest_codigo='101'
AND cab.dest_codigo=cli.registro
Assinar:
Postagens (Atom)