![]() |
(DBE+.dbf) Como consulto con IN sobre multiples campos?
Hola tengo qe hacer una consulta con IN usando dos campos como elemento del conjunto
Estoy usando DBE+DBase, les escribo un ejemplo simplificado de la consulta Código:
hay manera de hacerlo? |
¡Por dios! Una cosa es colocar títulos descriptivos y otra hacer la pregunta en el título. Por favor corrígelo.
En cuanto a lo que pides te pongo este fragmento de la ayuda del sql local: Código:
Indicates wether a value exists in a set of valuesDices que la concatenación no sirve pero no dices por qué. ¿Te marca algún error o no te da el resultado esperado? ¿Estas concatenando sólo el valor a verificar o tambien los campos de la subconsulta? // Saludos |
Cita:
Talves me exedi... |
Roman talves no me explique bien..
Como habras leido en el LOCALSQL.HLP 'The comparison set can also be the result set from a subquery. The subquery may return multiple rows, but must only return a single column for comparison' Con esto dice que es imposible un (cam1,camp2) IN (cam1,cam2) , como te decia intente un (cam1||camp2) IN (cam1||cam2) pero tira un error de sintaxis. Yo lo que quiero es ver si hay algun truco para lograr hacer la comparacion, dado que en los ejemplos no hay dada que me sirva. Talves lo mas seguro sera armar una pregunta y envairla al foro SQL pidiendo ayuda para la re-escritura de la consulta... Gracias, de todos modos |
Podes concatenar los campos... pero esto regularmente tiene una grave consecuencia en el desempeño... dependerá del tamaño de tu tabla si sea práctico o no...
Código:
SELECT count(DISTINCT ex.doc_numero);) |
Bueno, como veo que el hilo es más bien una consulta de SQL, vamos a moverlo a susodicho foro
A parte, otra posible solución (aunque me gusta más la de Juan Antonio y tambien todo depende de lo que quieras conseguit) sería lanzar dos selects anidados, es decir Código:
SELECT count(DISTINCT ex.doc_numero) |
Cita:
Pero no la muevas, voy a re-escribier la pregunta (pidiendo una ayuda para re-escrivir la consulta) y la publico en el foro SQL. Antes voy a probar campo1||campo2 sin los parecntesis como indica jachguate, la verdad que en este momento no recuerdo si probe sin parentesis :confused: gracias.. |
Sí es posible usar los campos concatenados para hacer la consulta pero me parece que el problema va a estar en la cláusula GROUP BY. A mi me el BDE indicó que no se pueden usar estos campos en group by (aun cuando el group by no use la concatenación).
// Saludos |
Hola.
El problema de lo planteado por el amigo cadetill, es que pueden colarse combinaciones no deseadas. Supongamos que tenemos... Código:
Tabla1Código:
select *Código:
select *Hasta luego. ;) |
En lo dicho por román... al menos en el caso planteado hoy no se usa group by así que no creo que haya problema.
Si la concatenación está soportado o no, dependerá en cualquier caso del Motor. En oracle no dará ningun problema, incluso puede hacerse un group by por funciones almacenadas y otras cosas interesantes, mientras que en interbase/firebird, me parece que si. En tablas planas, habrá que hacer una pequeña prueba. Hasta luego. ;) |
este problema siempre lo he solucionado asi
Código:
select * |
Como an respondido un monton (CRACIAS) tomandose el trabajo de pensar en la consulta, me siento responsable de responderles a todos.. (por simplicidad se los responto a todos en este mensaje)
Cita:
Cita:
un group by ins.doc_numero||ins.carrera tira "Capacidad no soportada" Lo que he pensado es crear un campo generado (no recuerdo nombre) desde un TQuery que sea la concatenacion y luego probar..., dichos campos se ven como si fuesesn realales. Cita:
Cita:
Donde deberia poner el group by y el having? en este momento la veo como un JOIN comun, y a mi no me sirve porque primero tengo que sacar un grupo de alumnos que an aprobado cierto rango de materias y luego a estos relacionarlos con otras tablas. Les dije gracias? :p |
prueba con esto a ver si te sirve:
Código:
SELECT count(DISTINCT ex.doc_numero) |
| La franja horaria es GMT +2. Ahora son las 08:00:17. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi