Bienvenido a la Comunidad de Treehouse

¿Quieres colaborar en errores de código? ¿Tienes errores que necesitan comentarios? ¿Buscas un par de ojos adicionales en tu último proyecto? aquí.

¿Buscas aprender algo nuevo?

Treehouse ofrece una prueba gratuita de siete días para estudiantes nuevos. Obtén acceso a miles de horas de contenido y únete a miles de

Inicia tu prueba gratuita

Bases de Datos Consultar Bases de Datos Relacionales Operaciones de Conjuntos Revisión y práctica

SQL Playground - Práctica de Operaciones de Conjuntos (segunda pregunta)

La Pregunta:

ENCONTRAR LIBROS ÚNICOS

Mi respuesta:

SELECT title FROM books_north EXCEPT SELECT title FROM books_south

y no creo que esta respuesta sea correcta, ¿podrías ayudarme?

Hola Ahmed,

Realmente me gustó tu respuesta... porque llegué a la misma conclusión también... desafortunadamente, sin éxito :\

Como probablemente hayas observado (pero esto es para el conocimiento de todos los demás), las siguientes dos consultas devuelven los mismos resultados:

-- consulta larga
SELECT title FROM books_north 
EXCEPT 
SELECT title FROM books_south 
UNION 
SELECT title FROM books_south 
EXCEPT 
SELECT title FROM books_north;

-- segunda mitad solo (que sobrescribe la primera mitad)
SELECT title FROM books_south 
EXCEPT 
SELECT title FROM books_north;

Mi única solución a esta misma pregunta se encuentra en dos consultas separadas, desafortunadamente:

-- Crea una lista de libros únicos. 
-- Libros que están en la ubicación norte o sur, pero no en ambas ubicaciones.
SELECT title FROM books_south
EXCEPT
SELECT title FROM books_north;
SELECT title FROM books_north
EXCEPT
SELECT title FROM books_south

7 respuestas

Steven Parker
Steven Parker
244 163 puntos

Estás cerca, pero necesitas ese último EXCEPT para ocurrir antes el UNION. Una subconsulta o tabla derivada ayudaría:

SELECT title FROM books_north EXCEPT SELECT title FROM books_south 
UNION 
SELECT title FROM (SELECT title FROM books_south EXCEPT SELECT title FROM books_north);

Pero esas técnicas aún no han sido introducidas. Sin adelantarse, puedes hacerlo usando una JOIN:

SELECT title FROM books_south UNION SELECT title FROM books_north
EXCEPT
SELECT books_south.title FROM books_south
    INNER JOIN books_north ON books_south.title = books_north.title;

Gracias Steven, tus respuestas siempre son las mejores, fáciles de entender y directo al punto

No entiendo por qué esta consulta no funciona. Veo que los resultados son solo los que están en el sur pero no en el norte, pero no entiendo por qué. ¿No debería unir tanto (a) los que están en el norte pero no en el sur como (b) los que están en el sur pero no en el norte?

SELECT title FROM books_north EXCEPT SELECT title FROM books_south UNION SELECT title FROM books_south EXCEPT SELECT title FROM books_north;

Creo que es algo con el orden de operaciones

nevermind, veo por qué.

Podría estar equivocado aquí, pero mi respuesta (después de revisar ambas tablas manualmente) solo produjo tres resultados que parecen ser correctos, así que la respuesta correcta debería ser:

-- Crea una lista de libros únicos. 
-- Libros que están en la ubicación norte o sur, pero no en ambas ubicaciones.

SELECT title,autor FROM books_north EXCEPT 
SELECT title,autor FROM books_south ORDER BY title;

resultados de respuesta

Steven Parker
Steven Parker
244 163 puntos

Eso te da los 3 libros en la ubicación Norte que no están en el Sur, pero hay 3 más en el Sur que no están en el Norte. La lista total de libros únicos tendrá 6 elementos.

Sí, hablé demasiado rápido pero decidí dejar mi respuesta para ayudar a entender mejor el problema. Creo que la pregunta se siente fuera de alcance si estás siguiendo, tienes que incluir un INNER JOIN en algún lugar y, como dijiste, el ejemplo de subconsulta funcionará pero no fue cubierto en ese momento. Acabo de repasar subconsultas.