Help to improve clause in SQL Select
Posted: Thu Apr 09, 2015 2:18 pm
Friends of the forum,
I have a select that is very slow and precise improve it so I ask your help.
Consider two tables:
CREATE TABLE "Propriedade" (
"Inscricao" INT(11) NOT NULL AUTO_INCREMENT,
"Titular_1" INT(11) NULL DEFAULT NULL,
"Titular_2" INT(11) NULL DEFAULT NULL,
"Titular_3" INT(11) NULL DEFAULT NULL,
PRIMARY KEY ("Inscricao")
)
CREATE TABLE "Titulares" (
"Titular_Codigo" INT(11) NOT NULL AUTO_INCREMENT,
"Nome" CHAR(60) NOT NULL,
PRIMARY KEY ("Titular_Codigo")
)
---------------------------------------------------------------------------
Relate the Titular_ fields 1, 2 and 3 of Propriedade table with Titular_Codigo field of Titulares table
The fields Propriedade.Titular_1, Propriedade.Titular_2 and Propriedade.Titular_3 that are as value 0 should return with Titulares.Nome = ""
Then used the select:
SELECT Propriedade.Inscricao,
Case When Propriedade.Titular_1 = 0 Then '' Else T1.Nome End,
Case When Propriedade.Titular_2 = 0 Then '' Else T2.Nome End,
Case When Propriedade.Titular_3 = 0 Then '' Else T3.Nome End
FROM Propriedade, Titulares AS T1, Titulares AS T2, Titulares AS T3
WHERE Propriedade.Titular_1 = Case When Propriedade.Titular_1 > 0 Then T1.Titular_Codigo Else 0 End
and Propriedade.Titular_2 = Case When Propriedade.Titular_2 > 0 Then T2.Titular_Codigo Else 0 End
and Propriedade.Titular_3 = Case When Propriedade.Titular_3 > 0 Then T3.Titular_Codigo Else 0 End
GROUP BY Propriedade.Inscricao, Propriedade.Inscricao, Propriedade.Inscricao
ORDER BY Inscricao
LIMIT 0, 500
---------------------------------------------------------------------------
Which returns me correctly:
"Inscricao", "T1.Nome", "T2.Nome", "T3.Nome"
"32", "ANTONIO", "MARIA", ""
"33", "ELIETE", "ELIZABETE", "MARLI"
"34", "DERCI", "MARGARIDA", "CARLITO"
"31", "ROBERTO", "LUIZ", ""
"37", "MARCIA", "", ""
---------------------------------------------------------------------------
The problem is that the amount of CASEs in a file with thousands of records is very slow
Can anyone help me improve the select?
In time, I can not change the files, only read them.
Thanks in advance.
I have a select that is very slow and precise improve it so I ask your help.
Consider two tables:
CREATE TABLE "Propriedade" (
"Inscricao" INT(11) NOT NULL AUTO_INCREMENT,
"Titular_1" INT(11) NULL DEFAULT NULL,
"Titular_2" INT(11) NULL DEFAULT NULL,
"Titular_3" INT(11) NULL DEFAULT NULL,
PRIMARY KEY ("Inscricao")
)
CREATE TABLE "Titulares" (
"Titular_Codigo" INT(11) NOT NULL AUTO_INCREMENT,
"Nome" CHAR(60) NOT NULL,
PRIMARY KEY ("Titular_Codigo")
)
---------------------------------------------------------------------------
Relate the Titular_ fields 1, 2 and 3 of Propriedade table with Titular_Codigo field of Titulares table
The fields Propriedade.Titular_1, Propriedade.Titular_2 and Propriedade.Titular_3 that are as value 0 should return with Titulares.Nome = ""
Then used the select:
SELECT Propriedade.Inscricao,
Case When Propriedade.Titular_1 = 0 Then '' Else T1.Nome End,
Case When Propriedade.Titular_2 = 0 Then '' Else T2.Nome End,
Case When Propriedade.Titular_3 = 0 Then '' Else T3.Nome End
FROM Propriedade, Titulares AS T1, Titulares AS T2, Titulares AS T3
WHERE Propriedade.Titular_1 = Case When Propriedade.Titular_1 > 0 Then T1.Titular_Codigo Else 0 End
and Propriedade.Titular_2 = Case When Propriedade.Titular_2 > 0 Then T2.Titular_Codigo Else 0 End
and Propriedade.Titular_3 = Case When Propriedade.Titular_3 > 0 Then T3.Titular_Codigo Else 0 End
GROUP BY Propriedade.Inscricao, Propriedade.Inscricao, Propriedade.Inscricao
ORDER BY Inscricao
LIMIT 0, 500
---------------------------------------------------------------------------
Which returns me correctly:
"Inscricao", "T1.Nome", "T2.Nome", "T3.Nome"
"32", "ANTONIO", "MARIA", ""
"33", "ELIETE", "ELIZABETE", "MARLI"
"34", "DERCI", "MARGARIDA", "CARLITO"
"31", "ROBERTO", "LUIZ", ""
"37", "MARCIA", "", ""
---------------------------------------------------------------------------
The problem is that the amount of CASEs in a file with thousands of records is very slow
Can anyone help me improve the select?
In time, I can not change the files, only read them.
Thanks in advance.