Vue SQL: les tables de Jointure sans causer de données en double sur chaque ligne?
Chaque fois que je créer un affichage de 3 tables, il reprend toutes les données sur toutes les lignes. Je ne suis pas à trouver comment rejoindre ces de sorte qu'il affiche les valeurs null au lieu de doublons. Pouvez-vous m'indiquer le droit direct?
Voici le scénario:
- Tableau 1 = Comptes: les Noms de Compte et les ID de Compte est
- Tableau 2 = Propriétés suivantes: Propriété Description, l'Adresse de la Propriété, et Compte ID
- Tableau 3 = Véhicules: Véhicule marque, le Modèle de Véhicule, et Compte ID
Les données ressemble à quelque chose comme ceci:
[Table 1= Accounts]
id name accountid
1 Family A account001
2 Family B account002
3 Family C account003
[Table 2= Properties]
id accountid description address
1 account001 home california
2 account001 beach mexico
3 account002 hideout arizona
4 account002 getaway nevada
5 account002 skilodge idaho
6 account 003 home texas
[Table 3= Vehicles]
id description make model accountid
1 green Acura Integra account001
2 blue Aston Martin Vantage account001
3 silver Audi Quattro account001
4 work Bently Continental GTC account002
5 kids Ford Fusion Hybrid account002
6 Mom's Car Land Rover LR4 account003
7 Paper Weight Mini Clubman account003
8 Beater Dodge Caliber account003
9 Why Mahindra TR40 account003
10 Kids Scion xB account003
Mon désir est de créer une vue qui me montre tous les enregistrements dans la base de données. Pour chaque ligne, je voudrais montrer le nom de compte et ensuite les données dans les tables.
Je suis à la recherche de la vue, pour renvoyer les résultats qui ressemble à la suivante: Où il n'a tout simplement pas d'affichage de données sur la ligne si les données ne sont pas venus de la colonne qu'il est actuellement de l'interrogation.
account_Name | property_DESCRIPTION | property_ADDRESS | vehicles_DESCRIPTION vehicles_MAKE | vehicles_MODEL
- Family A home california **null null null**
- Family A beach mexico **null null null**
- Family A **null null** blue Aston Martin Vantage
- Family A **null null** silver Audi Quattro
- Family B hideout arizona **null null null**
- Family B getaway nevada **null null null**
- Family B skilodge idaho **null null null**
- Family B **null null** kids Ford Fusion Hybrid
Mais au lieu de cela, il affiche des doublons de données, comme le suivant, où à chaque fois il trouve une nouvelle enregistrements, il remplit la ligne avec les données d'autres tables.
account_Name property_DESCRIPTION property_ADDRESS vehicles_DESCRIPTION vehicles_MAKE vehicles_MODEL
- Family A home california green Acura Integra
- Family A beach mexico green Acura Integra
- Family A home california blue Aston Martin Vantage
- Family A beach mexico blue Aston Martin Vantage
- Family A home california silver Audi Quattro
- Family A beach mexico silver Audi Quattro
- Family B hideout arizona work Bently Continental GTC
- Family B getaway nevada work Bently Continental GTC
- Family B skilodge idaho work Bently Continental GTC
- Family B hideout arizona kids Ford Fusion Hybrid
- Family B getaway nevada kids Ford Fusion Hybrid
- Family B skilodge idaho kids Ford Fusion Hybrid
Pourquoi cela se produit semble faire sens pour moi; tout est dans le joint. C'est comme si les jointures se sentir comme ils ont vraiment besoin d'afficher des données peu importe le coût. Réflexion à partir d'un script de point de vue, il semble que, au lieu de les jointures, j'ai besoin d'une boucle sur le tableau individuellement et ensuite rejoindre la résultante des boucles ensemble.
En essence j'ai besoin de la vue à la première afficher tous les enregistrements de la table 1, puis tous les enregistrements de la table 2, puis tous les enregistrements de la table 3. Je ne veux pas vraiment à se joindre à ces données, je veux juste la voir tout cela dans une seule vue.
Quelqu'un peut-il la moindre idée de moi de la façon de produire de la vue souhaitée ci-dessus qui montre les valeurs null au lieu de doublons?
C'est sur SQL 2008 R2 Enterprise.
Rejoignez Comptes sur les propriétés ajouter des valeurs NULL pour les colonnes de Véhicules. Rejoignez Comptes sur les Véhicules des valeurs NULL pour les colonnes de Propriétés. Combiner les deux avec un
union all
Martin merci pour la réponse. Il s'avère que ce que vous avez dit est exactement ce que je devais faire.
OriginalL'auteur Christopher | 2011-02-18
Vous devez vous connecter pour publier un commentaire.
Vous auriez besoin d'utiliser un SYNDICAT (en fait l'UNION de TOUS) dans ce cas.
A obtenu de l'UNION, TOUS couverts. D'accord sur la gauche de la rejoindre.
Wow...cette requête n'3 choses que je n'ai jamais vu avant. L'union et de déclarer une colonne nulle sens parfait. MERCI!!!! Dans ces 'de' déclarations, toutefois, vous êtes à l'aide de la magie des lettres que j'ai besoin d'en savoir plus sur. Quand vous dites "à Partir des Comptes", qu'est-ce que l'un? C'est presque comme si c'est l'affectation des Comptes tableau à une variable? Au lieu de "sur un.accountid" pourriez-vous dire "sur les Comptes.accountid"? J'ai changé la requête à utiliser le nom de table complet au lieu de la "une". le "p". "v." et il semble que cela fonctionne toujours. Est l'abréviation? Je vous remercie beaucoup.
En supposant que vous voyez ma question comme une preuve de mon niveau de connaissance sur SQL; je me demande si vous pourriez recommander des lectures supplémentaires que vous pensez peut-lift me up au prochain niveau? Peut-être un livre qui m'aurait donné les connaissances nécessaires pour répondre à cette question, avais-je le lire? (Aussi, depuis que je suis nouveau sur le serveur, il ne me laisse pas voter la réponse. Sinon je le ferais. merci encore une fois.)
Je vous recommande de commencer avec Itzik Ben-Gan Microsoft SQL Server 2008-SQL les Fondamentaux. Il est bien connu SQL Server autorité et un excellent écrivain.
OriginalL'auteur Joe Stefanelli
Cela ne fait pas de sens pour moi (dans le sens où je ne comprends pas le sens, non pas que c'est absurde).
La raison que vous voyez les données que vous êtes dans la seconde, c'est que il n'y a aucun rapport entre le véhicule et la propriété. Ce que vous avez à faire est ceci:
Un compte a un grand nombre de véhicules, et d'un compte qui possède de nombreuses propriétés; il n'y a aucun rapport entre le véhicule et de la propriété, cependant, de sorte que si vous décidez de faire quelque chose comme ceci:
Votre point de vue contient une ligne pour chaque combinaison de véhicules et de biens dans un compte donné (dont il semble que vous voyez).
Si ce que vous cherchez est une liste de comptes avec une liste de propriétés et une liste de véhicules (sans rapport entre eux), alors vous avez besoin pour créer deux requêtes distinctes et de les combiner avec un
union
.OriginalL'auteur Adam Robinson