2010-04-01 6 views
2

Je suis impatient de récupérer tous les champs du dernier enregistrement Cash, puis tous les champs de l'enregistrement TransactionInfo associé. Je ne peux pas tout à fait que cela fonctionne encore:Déclaration de jointure SQL Problème

select t.*, top 1 c.* from Cash c 
inner join TransactionInfo t 
on c.TransactionID = t.id 
order by c.createdOn desc 
+0

À quelle table appartient la colonne CreatedOn? –

+0

Désolé, postez erreur. Mis à jour maintenant – PositiveGuy

Répondre

1

Qu'est-ce que top 1 faire là-bas? Si vous voulez qu'une seule ligne, puis le TOP (1) doit venir en premier:

SELECT TOP(1) t.*, c.* 
FROM Cash c 
INNER JOIN TransactionInfo t 
ON c.TransactionID = t.id 
ORDER BY c.createdOn DESC 
+1

haut parce que je veux juste saisir la dernière entrée insérée .. sans connaître son identifiant – PositiveGuy

+0

oui je vois ce que vous dites maintenant. Et si je voulais juste le dernier enregistrement, pas tous les enregistrements. Je veux seulement voir un résultat et c'est le dernier enregistrement inséré dans la trésorerie basée sur CreatedOn – PositiveGuy

+0

Chaque dernière entrée de trésorerie par transaction? –

2
select top 1 * 
from Cash c 
inner join TransactionInfo t on c.TransactionID = t.id 
order by createdOn desc 
+0

mais sera-t-il également saisir tous les champs de TransactionInfo dans le jeu de résultats? J'ai besoin de voir les deux ensembles de champs. – PositiveGuy

+1

+1 - Je pense que c'est ce que l'OP est après (c'est-à-dire encore besoin du TOP 1, qui était juste au mauvais endroit) – AdaTheDev

+1

@coffeeaddict - avez-vous essayé d'exécuter cette requête? De vos commentaires, il semble vraiment que c'est ce que vous voulez. Pouvez-vous l'essayer et clarifier si elle fait (ou ne fait pas) ce que vous voulez? – AdaTheDev

0

select t. , c. à partir (Sélectionner top 1 * de l'ordre de trésorerie par createdOn desc ) c jointure interne TransactionInfo t sur commande c.TransactionID = t.id par createdOn desc

ne t utiliser select * en particulier avec une jointure , il gaspille les ressources du serveur.

0
SELECT c.*, t.* FROM cash c, transactioninfo t 
WHERE c.infoid = t.id AND c.createdOn = (SELECT max(createdOn) FROM cash WHERE infoId = t.id) ORDER BY transactiontabledate desc 

Vous devez trouver l'enregistrement avec la dernière date de la table cash pour chaque transactionId et l'utiliser également pour le filtrer dans votre requête.