2010-10-25 2 views
0

J'ai une table avec des produits.
Lorsque j'obtiens des informations de cette table, j'aimerais aussi obtenir l'ETA de cet article. Pour ce faire, je prévois d'obtenir la dernière ligne de commande, c'est-à-dire cet article, et d'obtenir la livraison attendue de cet achat.Svc ombré 10 Rejoindre une table, sur une autre, sur une autre

Ceci est trois tables différentes et je voudrais que ce soit comme une autre colonne sur la requête, donc je peux obtenir la valeur de la colonne comme si elle était sur la même table.

Est-ce que mon idée est possible? S'il n'y a pas de commande sur cet article, je voudrais que la valeur soit nulle.

Produits

Int ProductId 
Int Price 

Données exemples

ProductId Price 
----------------- 
1   100 
2   300 

PORows

Int RowId 
Int ProductId 
Int POId 

Données d'échantillons

RowId ProductId POId 
----------------------- 
1  1   1 

PO

Int POId 
DateTime ETA 

Données d'échantillons

POId ETA 
----------------------- 
1  2010-10-25 10:05 

donc le résultat que je voudrais est:

ProductId Price ETA (null if no rows exist) 
------------------------------------------------ 
1   100 2010-10-25 10:05 
2   300 NULL 
+0

cela semble possible, de toute façon vous pouvez clarifier la disposition de votre table et le résultat souhaité? – Orbit

+0

@OMG Poneys S'il vous plaît voir ma modification. Pervasive 10 –

Répondre

0

Utilisation:

SELECT p.productid, 
      p.price, 
      x.max_eta 
    FROM PRODUCTS p 
LEFT JOIN POROWS r ON r.productid = p.productid 
LEFT JOIN (SELECT po.id, 
        MAX(po.eta) AS max_eta 
      FROM PO po 
     GROUP BY po.id) x ON x.poid = r.poid 

Pervasive est la seule base de données que je suis au courant de cela ne vous permettra pas d'omettre les mots-clés INNER et OUTER. V10 pourrait avoir relâché cela, mais je sais que c'est le cas pour v8 et 2000.

+0

@ OMG Poneys, Manque l'un des composants clés, maintenant tout produit qui n'a pas un POROW associé sera omis. Btw les mots-clés INNER et OUTER peuvent être laissés de côté maintenant –

+0

@Oskar Kjellin: Voir la mise à jour, heureux de voir v10 permet d'omettre des mots que tous les autres DB le permet aussi. –

+0

@OMG Poneys: Merci beaucoup! –

0

Je ne sais pas envahissants, mais dans la norme SQL que vous pouvez faire la sélection pour la dernière PO une sous-requête crénelage

select Products.id, products.name, ProductETAS.ETA 
from Products 
left join 

( 
    select POLINES.productid, min(PO.ETA) as ETA from PO inner join POLINES 
    on PO.id = POLINES.POid and POLINES.productid = ? 
    where PO.ETA >= today 
    group by POLINES.productid 
) as ProductETAS 

on Products.productid = ProductETAS.productid 
Questions connexes