Ver Mensaje Individual
  #9 (permalink)  
Antiguo 14/10/2010, 08:46
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Al cruzar tablas necesito que arroje una vez el campo en común

Buenas tardes modeff, espero que ya gnzsoloyo te haya resuelto las dudas con respecto a los alias, pero si continuas con problemas para entender la consulta que puse me lo comentas para tratar de explicarla.

Por lo que comentas en tu último post al parecer sí te funcionó la consulta que propuse, te comento que para mostrar sólo los temas que tienen enlace puedes hacerlo mediante los operadores ANY, EXISTS o IN. te pongo un ejemplo de cómo sería utilizando la sentencia ANY, pero te recomiendo que revises en alguno de los manuales que descargaste más acerca del uso de estas cláusulas.

Código SQL:
Ver original
  1. SELECT 1 AS nivel, T1.id, T1.nombre_tema AS descripcion FROM temas T1
  2. WHERE
  3. --Con esto muestras sólo los temas que tengan algún enlace
  4. T1.id = ANY (SELECT DISTINCT id_tema FROM sitios_web_por_tema W2)
  5. UNION
  6. SELECT 2 AS nivel, W.id_tema AS id, W.enlace_web AS descripcion
  7. FROM sitios_web_por_tema W INNER JOIN temas T2 ON W.id_tema = T2.id
  8. WHERE
  9. idioma = '5'
  10. --Falta agregar la condición para id_concepto
  11. ORDER BY id, nivel, descripcion

Como verás estoy tomando la misma consulta que propuse al inicio, si tuviste que hacer alguna adecuación adicional para que te funcionara pues debes volver a aplicarla.

Y un comentario adicional a lo que mencionaba el compañero gnzsoloyo

Cita:
Respecto al ejemplo propuesto por leonardo_josué, lamento advertirte que lo que te traerá será esto:

Código:
nivel|id|descripcion
------------------------
1|1|Tema 1 
1|2|Tema 2
1|3|Tema 3 
2|1|Enlace 1 
2|1|Enlace 2 
2|1|Enlace 3 
2|2|Enlace 4 
2|2|Enlace 5 
2|2|Enlace 6

porque en un UNION, el último ORDER BY afecta la totalidad de la tabla devuelta y no una parte de ella, por lo que ordenará las dos primeras columnas de todos los registros primero.
Efectivamente como lo comentas el orden se aplica en la total de la tabla pero creo que no revisaste la secuencia de ordenación que estoy manejando, si observas primero se ordena por el ID y después por el nivel, de tal manera que los campos se presentan tal y como lo puse en el post:

Código:
nivel|id|descripcion
------------------------
1|1|Tema 1
2|1|Enlace 1
2|1|Enlace 2
2|1|Enlace 3
1|2|Tema 2
2|2|Enlace 4
2|2|Enlace 5
2|2|Enlace 6
1|3|Tema 3
Un saludo
Leo.