Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: DanteInfernum en 15 Septiembre 2013, 20:30 pm



Título: ¿Cómo evito mostrar columnas repetidas?
Publicado por: DanteInfernum en 15 Septiembre 2013, 20:30 pm
El asunto es así:

Tengo 2 tablas, Empleados y Trabajan. La columna IdEmp es clave primaria de Empleados y a su vez clave foránea de Trabajan. Quiero componer las dos tablas mediante un inner join y mostrar todos los datos resultantes.

Tengo la siguiente consulta en SQL:

Código:
select *
from empleados inner join trabajan
on empleados.idemp = trabajan.idemp

La cuestión es que IdEmp pertenece a las 2 tablas, por lo que al mostrar todos los datos esta columna se repite. Me gustaría saber qué puedo hacer para evitar esto (sin tener que seleccionar las columnas que quiero mostrar una por una).


Título: Re: ¿Cómo evito mostrar columnas repetidas?
Publicado por: Shell Root en 16 Septiembre 2013, 08:11 am
GROUP BY (http://dev.mysql.com/doc/refman/5.0/es/group-by-modifiers.html)? Porque pertenece a las 2 tablas, no entiendo... Podrias mostrar el resultado a ver como se ven los datos?


Título: Re: ¿Cómo evito mostrar columnas repetidas?
Publicado por: DanteInfernum en 16 Septiembre 2013, 19:17 pm
Después de hacer un inner join entre las tablas Empleados y Trabajan, muestro todos los campos, y me queda algo así:


IdEmp   Nombre   Apellido   Direccion   IdEmp   IdCargo  IdSeccion


IdEmp pertenece a la tabla Empleados y también a la tabla Trabajan. Por eso se muestra dos veces. Y lo que quería saber es si existe alguna forma de mostrar la columna IdEmp una sola vez.

El Group By tengo entendido que sólo sirve cuando tengo funciones de agregación como lo son SUM(), COUNT(), etc. Pero no sé, capaz que sirve para más cosas también...


Título: Re: ¿Cómo evito mostrar columnas repetidas?
Publicado por: Shell Root en 16 Septiembre 2013, 21:07 pm
Basicamente,
Código
  1.      SELECT emp.*, tra.IdCargo, tra.IdSeccion
  2.        FROM empleados emp
  3.  INNER JOIN trabajan tra ON empleados.idemp = trabajan.idemp


Título: Re: ¿Cómo evito mostrar columnas repetidas?
Publicado por: DanteInfernum en 17 Septiembre 2013, 02:22 am
Mmm... Ok, pero de esa forma estoy detallando explícitamente las columnas de la tabla Trabajan que quiero que aparezcan, que es justo lo que quería evitar.

Pero sí, parece que no hay otra forma. O indicas todas las columnas que quieras mostrar una por una, o las seleccionas TODAS con *. No existe algo así como:

Código
  1. SELECT * EXCEPT(columnaX)
  2.  

Talvez se pueda solucionar esto creando un procedimiento que te busque una determinada columna y la elimine, pero recién estoy empezando con el tema de los scripts en SQL y no lo tengo muy claro aún todo este asunto.


Muchas gracias por las respuestas!

Saludos.


Título: Re: ¿Cómo evito mostrar columnas repetidas?
Publicado por: Shell Root en 17 Septiembre 2013, 05:48 am
:http://es.softuses.com/81643


Título: Re: ¿Cómo evito mostrar columnas repetidas?
Publicado por: 1mpuls0 en 23 Septiembre 2013, 19:42 pm
No conozco alguna instrucción que haga eso, me temo que tendrás que indicarlas.

Edito:
Algo que se acerque puede ser.

Código
  1. SELECT empleados.*, trabajan.IdCargo, trabajan.IdSeccion, trabajan.IdTrab FROM empleados
  2. INNER JOIN trabajan ON empleados.IdEmp=trabajan.IdEmp
  3.  


Encontré esto... a ver si te sirve.

Estructura
Código
  1. mysql> SHOW FIELDS FROM products;
  2. +-------------+---------+------+-----+---------+----------------+
  3. | FIELD       | TYPE    | NULL | KEY | DEFAULT | Extra          |
  4. +-------------+---------+------+-----+---------+----------------+
  5. | id          | INT(11) | NO   | PRI | NULL    | AUTO_INCREMENT |
  6. | category_id | INT(11) | YES  |     | NULL    |                |
  7. | owner_id    | INT(11) | YES  |     | NULL    |                |
  8. +-------------+---------+------+-----+---------+----------------+
  9. 3 ROWS IN SET (0.01 sec)
  10.  

Código
  1. mysql> SET @SQL = CONCAT('SELECT ', (SELECT REPLACE(GROUP_CONCAT(COLUMN_NAME), 'id,', '') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'products' AND TABLE_SCHEMA = 'ehn'), ' FROM products');
  2. Query OK, 0 ROWS affected (0.03 sec)
  3.  

Código
  1. mysql> SELECT @SQL;
  2. +----------------------------------------+
  3. | @SQL                                   |
  4. +----------------------------------------+
  5. | SELECT category_owner_id FROM products |
  6. +----------------------------------------+
  7. 1 ROW IN SET (0.00 sec)
  8.  

Saludos.


Título: Re: ¿Cómo evito mostrar columnas repetidas?
Publicado por: #!drvy en 23 Septiembre 2013, 20:20 pm
Creo que USING fue creado precisamente para estas cosas xD

Código
  1. SELECT * FROM empleados INNER JOIN trabajan USING (idEmp)

(http://i.elhacker.net/i?i=QtlnxgJ6CciNdbazntf3UmVo) (http://i.elhacker.net/d?i=QtlnxgJ6CciNdbazntf3UmVo)

Saludos


Título: Re: ¿Cómo evito mostrar columnas repetidas?
Publicado por: 1mpuls0 en 23 Septiembre 2013, 21:14 pm
Creo que USING fue creado precisamente para estas cosas xD

Código
  1. SELECT * FROM empleados INNER JOIN trabajan USING (idEmp)

Genial. ;-) creo que le servirá.
Aunque tengo entendido que con esa función debe existir el campo en ambas tablas y por ende solo funciona con * JOIN.


Saludos.


Título: Re: ¿Cómo evito mostrar columnas repetidas?
Publicado por: DanteInfernum en 1 Octubre 2013, 18:20 pm
¿La cláusula USING es propia de MySQL, no? Lo que pasa que yo estoy usando SQL Server. Igual está bueno el dato; me sirve a futuro.