¿Se pueden dos campos de esta consulta SQL?

varuk

Buenas.

Tengo dos preguntas, una sencilla y otra que se me ha ocurrido sobre la marcha.

El caso es que tengo esta consulta:

SELECT DISTINCT nombre, equipo
FROM TABLA
WHERE nombre IN (SELECT DISTINCT nombre
FROM TABLA
GROUP BY nombre
HAVING COUNT(equipo) = 1 AND codfot IS NOT NULL);

Es decir, eso saca de una tabla los nombres que solamente pertenecen a un equipo de fútbol, por ejemplo, dejando fuera los nombres que tienen varios equipos, personas con varios equipos.

El caso es que del primer SELECT me preguntaba si hay alguna forma de sacar ya el equipo para no tener que hacer otro SELECT. Es decir, sacar el equipo de aquí también:

SELECT DISTINCT nombre
FROM TABLA
GROUP BY nombre
HAVING COUNT(equipo) = 1 AND codfot IS NOT NULL;

El Distinct lo pongo porque en la tabla podría darse este caso:

Pepe Atleti
Manolo Valencia
Manolo Levante
Pepe Atleti

(Y hago el distinct ya que Pepe en verdad solo tiene 1 equipo).

Y una última cuestión, si finalmente tengo por ejemplo como resultado:

Pepe Atleti

Y tengo dos Tablas más, una que contiene, tabla EQUIPOS el IDEQ (id) de Atleti, junto al nombre del equipo, y otra tabla que contiene, llamada PERSONA, el IDPE (id) de Pepe junto al nombre (Pepe en este caso).

¿Cómo podría teniendo, ya el resultado, "Pepe Atleti", sacar de dos tablas diferentes esos campos?

Weahl

Si pusieras como están estructuradas las tablas podríamos ayudarte mejor.

Aun así creo haber entendido que de la primera consulta quieres sacar también el nombre del equipo, porque ese campo que pones ahí será un ID o algo así, ¿me equivoco?

Saludos

1 respuesta
varuk

#2 Sí, la primera pregunta era más por si podía simplifcarse eso:

Que en vez de hacer dos SELECT:

SELECT DISTINCT nombre, equipo
FROM TABLA
WHERE nombre IN (SELECT DISTINCT nombre
FROM TABLA
GROUP BY nombre
HAVING COUNT(equipo) = 1 AND codfot IS NOT NULL);

Se haga una y aquí mismo puedas sacar el nombre del equipo (ya que el GROUP BY entorpece eso)

SELECT DISTINCT nombre
FROM TABLA
GROUP BY nombre
HAVING COUNT(equipo) = 1 AND codfot IS NOT NULL;

Lo tengo resuelto todo, era por ver si podía mejorarlo.

R3DKNIF3

Realmente no se entiende muy bien lo que buscas, en la segunda pregunta quieres que salgan los ID's?

SELECT
  t.nombre,
  t.equipo,
  e.ideq,
  p.idpe
FROM
  TABLA T,
  EQUIPO E,
  PERSONA P
WHERE
    t.equipo = e.equipo
and p.nombre = p.nombre
and t.codfot is not null -- codfot esto que es?
group by nombre, equipo

No se si esto te soluciona, asi sin la BBDD no se decirte si saldrá lo que quieres, yo soy más de prueba y modifica xD

Weahl

A ver si he atinado con esto.

SELECT DISTINCT p.nombrePersona, e.nombreEquipo
FROM persona p, equipo e
WHERE e.codEquipo= p.equipo
GROUP BY p.nombrePersona, e.nombreEquipo
HAVING count(p.equipo) = 1
AND codfot IS NOT NULL;

Con la última pregunta, como no has puesto aun la estructura de la BD, imagino que la tabla persona tiene un equipo que es en el que juega el jugador, ¿no?

Si fuera así, teniendo a Pepe Atleti, si quieres sacar el nombre del equipo sería algo así:

SELECT nombreEquipo
FROM equipo e, persona p
WHERE p.nombre = 'Pepe Atleti'
AND p.equipo = e.codequipo;

Espero haber acertado.

Saludos.

Usuarios habituales

  • Weahl
  • R3DKNIF3
  • varuk