Estoy usando SQL Server y estoy teniendo dificultades para obtener los resultados de una consulta SELECT
que deseo. Intenté unirme a diferentes pedidos y usar subconsultas, pero nada funciona del modo que quiero. Tome este ejemplo artificial de aplicaciones de software, con diferentes niveles de versión, que podrían instalarse en computadoras de personas.Servidor SQL: varias tablas se unen con una cláusula WHERE
Necesito realizar un JOIN
con un WHERE
, pero por alguna razón no puedo obtener los resultados que quiero.
Quizás estoy viendo mis datos incorrectamente, no estoy muy seguro de por qué no puedo hacer que esto funcione.
Aplicación tabla
ID Name
1 Word
2 Excel
3 Powerpoint
Software Tabla (contiene información de la versión para diferentes aplicaciones)
ID ApplicationID Version
1 1 2003
2 1 2007
3 2 2003
4 2 2007
5 3 2003
6 3 2007
Software_Computer tabla unión
ID SoftwareID ComputerID
1 1 1
2 4 1
3 2 2
4 5 2
ordenador mesa
ID ComputerName
1 Name1
2 Name2
Quiero una consulta que podría correr en el que seleccionar un equipo específico para mostrar la versión de software y aplicaciones IS tiene, pero también quiero que se muestre lo que la aplicación no lo hace tiene (la versión sería una NULL
ya que no tiene que el software en él)
SELECT Computer.ComputerName, Application.Name, Software.Version
FROM Computer
JOIN Software_Computer
ON Computer.ID = Software_Computer.ComputerID
JOIN Software
ON Software_Computer.SoftwareID = Software.ID
RIGHT JOIN Application
ON Application.ID = Software.ApplicationID
WHERE Computer.ID = 1
Quiero el siguiente conjunto de resultados
ComputerName Name Version
Name1 Word 2003
Name1 Excel 2007
Name1 Powerpoint NULL
Pero apenas consigo
Results
ComputerName Name Version
Name1 Word 2003
Name1 Excel 2007
me pareció que el RIGHT JOIN
incluiría todos los resultados en la tabla de aplicación, incluso si no están asociados con el ordenador. ¿Qué estoy perdiendo/haciendo mal?
Tal vez sea porque soy alto, pero ¿no estás limitando las aplicaciones del software de las computadoras? ¿Y no hay solo dos programas pertenecientes a la computadora 1? Además, ¿no debería una combinación izquierda anular una combinación correcta? Eso necesito verificar Y PowerPoint tiene una versión, ¿por qué esperaría nulo? Además, con múltiples versiones para aplicaciones, en la tabla de software de computadoras, también debe mantener una identificación de versión, de lo contrario, tendría todo tipo de resultados desordenados. – frostymarvelous