Alors peut-être que quelqu'un peut m'aider à comprendre une instruction SQL appropriée pour obtenir les résultats souhaités.

Donc, j'appelle une table appelée "factures" de la base de données avec l'instruction SQL "SELECT * FROM factures". (J'utilise le caractère générique car je tire toutes les données et il y a environ 8 lignes.)

J'ai ajouté une fonctionnalité à ce projet où il existe 3 types de comptes différents. "Marketing, informatique et sécurité" Cela se reflète dans une colonne du tableau "Comptes".

Ainsi, le tableau des comptes aura 2 colonnes que nous devrons comprendre pour terminer la tâche souhaitée.

Nous avons «ID de compte» qui sert de clé primaire et «Service» qui sert de type de compte.

La facture a une colonne «Compte associé» qui est la valeur «ID de compte» du compte auquel appartient la facture particulière.

Disons que je souhaite afficher toutes les factures du département "Marketing". Y a-t-il une instruction SQL que je peux utiliser pour accomplir cela ou dois-je la structurer d'une manière différente.

Je ne comprends pas vraiment parfaitement les requêtes JOIN et UNION, alors j'ai pensé poser la question ici.

-2
jds 20 nov. 2018 à 21:44

4 réponses

Meilleure réponse

Select * from Invoices where AccountId,Account_Name in (Select AccountId,Account_Name from Accounts where Account_Name ='Marketing'); Cela signifie toutes les données de facture pour tous les comptes qui sont marketing et qui existent dans la table des comptes. Et, la jointure sert à joindre deux tables liées (la plupart du temps ce n'est pas une contrainte) et pour l'union, cela fonctionne lorsque les deux tables ont le même nombre de colonnes et le même type.

1
Himanshu Ahuja 20 nov. 2018 à 18:54

Dans une base de données relationnelle, vous devez souvent joindre des tables de manière significative. Ainsi, le mot-clé "rejoindre". On dirait que c'est exactement ce que vous voulez.

Il semble également que vous êtes sur la bonne voie, puisque vous semblez avoir compris l'importance d'une clé primaire et étrangère, pour lier les tables entre elles.

Peut-être que quelque chose comme ça peut faire l'affaire (je suppose que vous avez une clé étrangère appelée account_id dans la table de facturation):

SELECT *
FROM invoices
INNER JOIN accounts ON invoices.account_id = accounts.account_id

Je commencerais par lire quelque chose comme ceci: https://www.w3schools.com/sql/sql_join_inner.asp

1
Annish 20 nov. 2018 à 18:53

Vous pouvez essayer ceci:

select a.Department,i.InvoiceID from #Accounts AS a
INNER JOIN #Invoice AS i    ON  a.AccountID = i.AssociatedAccountID
WHERE a.Department = 'Marketing'

Veuillez modifier les noms de table et les noms de colonne si nécessaire.

Dans votre cas, si vous appliquez INNER JOIN aux deux tables sur Account ID, vous n'obtiendrez que le invoices lié à un Account ID et vous pourrez le restreindre à chaque {{ X4}} en utilisant une clause WHERE.

UNION ne s'applique pas ici. Vous n'utilisez UNION que lorsque vous souhaitez récupérer des données similaires à partir des deux tables ayant une structure similaire.

1
GGadde 20 nov. 2018 à 19:01

La façon dont vous l'avez structurée fonctionnera, mais ce n'est pas forcément la meilleure structure à aucun effort d'imagination. (Je renommerais cette table pour qu'elle s'appelle "Départements" si c'est ce qu'elle reflète, etc.)

SELECT invoices.*
FROM invoices
    INNER JOIN accounts on invoices.accountID = accounts.accountID
WHERE accounts.Department = 'Marketing'
  • En indiquant "factures. *", Vous dites ne me montrer que les données du tableau des factures.

  • En INNER JOIN'ing les deux tables sur leurs champs associés, vous ne retournerez que les données qui existent dans les deux tables (c'est-à-dire les factures qui ont des départements créés dans votre table de comptes).

  • En indiquant que vous souhaitez uniquement voir "Marketing" dans la clause where, vous filtrerez ensuite ces résultats joints en fonction de ces critères.

0
haag1 20 nov. 2018 à 18:56