J'ai la table Invoice_Items: puis la facture de la table: p> données sur la table Invoice_Items: P> SELECT b.type, b.invoice_id, i.kb_invoice, b.current_balance, b.external_key, b.created_date, i.trx
from invoice_items b
left outer join invoice i ON b.invoice_id = i.kb_invoice
where b.external_key='MT80'
and b.tenant_record_id='7'
4 Réponses :
Dans votre violon, vous n'avez pas de kb_invoce avec NULL VALEUR afin que votre requête ne renvoie pas de lignes .. Vous avez besoin d'une valeur NULL appropriée pour Invoce KB_INVOICE
INSERT INTO invoice
("kb_invoice",
"trx",
"id_invoice",
"uid_invoice",
"datetime",
"cur_balance",
"description",
"eeuser",
"external_key",
"tenant",
"document",
"sms",
"amount")
VALUES
(null,'2','3012577', null,'2019-12-18 18:46:57.048000','957',null,'1236165','MT80','2078698','2',null,'1'
);
Je pense que vous avez mal compris ce que OP essaie de faire. Il cherche orphelined invoice_items code>, mais dans son exemple, les deux enregistrements de cette table ont un enregistrement correspondant dans facture code>, donc il renvoie 0 enregistrements. Il n'y a pas besoin de valeur nulle dans cette colonne, il doit simplement modifier légèrement la valeur clé dans l'une des tables. NULL se qualifie, mais n'est pas la seule possibilité comme vous impliquer.
essayer p>
SELECT * de ( STRUT> SELECT b b. "external_key", b. "créé_date", i. "trx" de solvoice_items b Rejoignez la facture de la facture i sur b. "Invoice_id" = i. "kb_invoice" où b. "external_key" = 'mt80' et b. "tenant_record_id" = '7' ) comme x où x. "A" est null; strong> p>
Il n'est pas possible d'utiliser le nom d'alias de colonne dans l'endroit où / ON Clause. Pas dans PostgreSQL.
Alors utilisez l'extrême gauche rejoindre le résultat temporaire
Je l'ai essayé, mais le résultat si on existe sur 2, il n'existe pas de spectacle, il ne doit pas montrer la deuxième ligne et la troisième rangée ne devrait pas être montrant, aucun conseil? et avec vous exemple, le résultat est vide @Aschoerk dbfiddle.uk/...
Votre testData ne contient pas de facture_Items orphelins. Par conséquent, la déclaration ne renvoie aucun enregistrement. Ai-je bien compris vos intentions?
Si je comprends votre question correctement, vous souhaitez trouver des objets de facturation où il n'y a pas de ligne de facture correspondante. p>
Votre requête a l'air bien, mais vos échantillons de données ne transmettent pas le scénario que vous dites que vous recherchez. P>
Si vous modifiez votre exemple de données Cependant, il est assez inhabituel d'avoir une relation parent-enfant non référentielle appliquée, permettant d'insertion d'éléments enfants ( invoice_id code> pour référencer une facture inexistante (j'ai utilisé bb963c3a-6fdb-47df-b3d9-00000000000000 code>), vous Voir que votre requête fonctionne, selon cette Fiddle mis à jour . La ligne ORPHANED FIVOICE_ITEM CODE> est renvoyée, avec des données NULL dans le parent qui a été EXTÉRIEUR EXTÉRIEUR JOINT JOINT CODE>. (Vous avez peut-être eu envie d'utiliser b.trx code> dans vos colonnes SELECT, c'est-à-dire désactivé invoice_items code>, car facture.trx code> sera toujours null) . p>
élément de facturation code>) sans un parent associé ( facture code code >) rangée. Cela sera sujet aux lignes orphelines (selon votre requête). P>
Ce problème a été le succès de cette solution, sur la clause ON où ajoutez Solution P> P> P> P > trx = 3 code> car trx = 3 code> est manquant sur la facture de la table, mais la même facture Invoice_id existe sur les deux table:
Vous souhaitez donc rechercher toutes les factures-items avec external_key 'mt80', où aucune facture ne peut être trouvée?
Les deux éléments de facturation ont la même facture_id si évidemment les matchs de jointure gauche pour les deux rangées. Si vous aviez utilisé une jointure intérieure, vous obtiendrez le même résultat (et les deux lignes ont le même tenant_record_id et external_key). Laquelle des deux rangées attendriez-vous à être retournée?
Oui, obtenir de la valeur juste sur la facture n'existe pas, mais dans Invoice_items existe @Aschoerk
Voir ma réponse, cela devrait fonctionner