2012-11-26 5 views
0

J'ai ces deux requêtes que j'essaie de combiner.SQL - Combinaison de deux requêtes

Requête 1 - Ceci me dit tous les véhicules que j'ai dans mon inventaire. Signification ne sont pas dans le tableau de la propriété:

SELECT VEHICLE.* 
FROM VEHICLE 
WHERE NOT EXISTS 
(SELECT NULL FROM OWNERSHIP WHERE VEHICLE.VEH_ID= OWNERSHIP.VEH_ID); 

Requête 2 - Celui-ci me dit quelle voiture est le plus haut prix pour chaque marque. J'ai réalisé que déterminer quels véhicules sont les plus chers n'aura pas d'importance s'ils sont déjà la propriété d'un client. Puisque la première requête nous dit quels sont ceux disponibles, comment pourrais-je combiner ces deux?

Répondre

2

Je ne pouvais pas tester votre requête, mais pense que c'est ce que vous cherchez:

SELECT 
    B.BRAND_ID, 
    B.BRAND_NAME, 
    M.MODEL_NAME, 
    C.CLASS_NAME, 
    V.VEH_ID, 
    V.VEH_YEAR, 
    V.VEH_PRICE 
FROM 
    (((VEHICLE AS V INNER JOIN CLASS AS C ON V.CLASS_ID = C.CLASS_ID) 
    INNER JOIN MODEL AS M ON M.MODEL_ID = V.MODEL_ID) 
    INNER JOIN BRAND AS B ON B.BRAND_ID = M.BRAND_ID) 
    INNER JOIN (SELECT M.BRAND_ID, MAX(V.VEH_PRICE) AS VEH_PRICE 
       FROM VEHICLE AS V 
        INNER JOIN MODEL AS M 
        ON M.MODEL_ID = V.MODEL_ID 
       WHERE 
       NOT EXISTS 
        (SELECT NULL FROM OWNERSHIP 
        WHERE V.VEH_ID=OWNERSHIP.VEH_ID) 
       GROUP BY M.BRAND_ID) AS derived 
    ON (v.VEH_PRICE = derived.VEH_PRICE) 
    AND (b.BRAND_ID = derived.BRAND_ID) 
WHERE 
    NOT EXISTS 
    (SELECT NULL FROM OWNERSHIP 
    WHERE V.VEH_ID=OWNERSHIP.VEH_ID) 
ORDER BY 7 DESC; 

Vous devez exclure les voitures appartenant déjà à la sous-requête où vous calculer le prix maximum pour chaque marque, mais également dans la requête externe, pour exclure les voitures appartenant au même prix que le nombre maximal de voitures qui n'ont pas de propriétaire. Au lieu d'utiliser la clause NOT EXISTS, je suggère également d'ajouter un autre LEFT JOIN avec OWNERSHIP à la fois dans la sous-requête et dans la requête externe, et de ne prendre que les lignes où OWNERSHIP.VEH_ID est null.

+0

Il y a une autre clause 'Vehicle AS V' que vous n'avez pas 'réparée', mais je ne pense pas que cela changerait le résultat. –