Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta de bases de datos relacionadas (https://www.clubdelphi.com/foros/showthread.php?t=74445)

darkvid2010 20-06-2011 22:46:14

Consulta de bases de datos relacionadas
 
Hola,

tengo el siguiente problema con esta consulta:
sqldieta.SQL.Add('SELECT * FROM datos_dieta, tabla_intolerancias WHERE identificador='+QuotedStr(elidentificador)+' AND tabla_intolerancia.alimento=datos_dieta.alimento ');

Me indica siempre que tabla_intolerancia.alimento no tiene un valor predeterminado, lo que hago es localizar por el identificador los datos del usuario ubicados en la tabla_intolerancia y luego quiero seleccionar de datos_dieta aquellos alimentos que son iguales a los de la tabla_intolerancia pues estos son los que deben figurar en la dieta ya que necesito poder manipular unicamente los alimentos que coincidan en ambas tablas.

oscarac 20-06-2011 23:16:07

porque no usas left join ?

Código SQL [-]
Select Tabla1.Campos, Tabla2.Campos
From Tabla1
Left join Tabla2 On Campostabla1igual=campotabla2igual

ejemplo si en ambas tablas existe el campo identificador

Código SQL [-]
Select Tabla1.Campos, Tabla2.Campos
From Tabla1
Left join Tabla2 On Tabla1.Identificador = Tabla2.Identficador

ecfisa 21-06-2011 05:17:35

Cita:

tengo el siguiente problema con esta consulta:
sqldieta.SQL.Add('SELECT * FROM datos_dieta, tabla_intolerancias WHERE identificador='+QuotedStr(elidentificador)+' AND tabla_intolerancia.alimento=datos_dieta.alimento ');
Hola.

Creo que tu consulta debería ser:
Código Delphi [-]
  sqldieta.SQL.Clear;
  sqldieta.SQL.Add('SELECT * FROM datos_dieta c1, tabla_intolerancias c2');
  sqldieta.SQL.Add('WHERE c1.identificador = :elidentificador AND ');// (*)
  sqldieta.SQL.Add('c1.alimento = c2.alimento');
  sqldieta.ParamByName('elidentificador').AsString:= elidentificador;
(*) c1.indentificador ó c2.identificador, de acuerdo a la tabla que pertenezca el campo.

O si preferis podés utilizar join tál como te sugiere oscarac.

Saludos.

darkvid2010 21-06-2011 18:25:15

Mil gracias, al final lo logre solucionar con el JOIN de esta manera:
sqldieta.SQL.Add('SELECT *'+
' FROM tabla_intolerancias LEFT JOIN datos_dieta ON'+
' tabla_intolerancias.alimento=datos_dieta.alimento where tabla_intolerancias.identificador='+QuotedStr(elidentificador));
sqldieta.Open;


El identificador es la llave principal de la primera tabla, por si alguien quiere saber como es el problema entero es lo siguiente:

tengo tablas: test, intolerancias y dieta

El usuario se realiza un test de intolerancia alimentaria y eso genera los datos de las tablas test y de intolerancia, y con eso podemos localizar dentro de la dieta los alimentos que no debe tomar posicionandonos en el identificador del usuario ( llave principal) y buscando en la dieta los alimentos a los que presenta intolerancia alimentaria.

Muchisimas gracias, Soys lo mas grande.

oscarac 21-06-2011 18:37:26

entonces esta solucionado? :D


La franja horaria es GMT +2. Ahora son las 16:42:28.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi