2010-04-01 134 views
2

我试图从最新的现金记录中抓取所有字段,然后从相关的TransactionInfo记录中获取所有字段。我不能完全得到这个工作:SQL加入声明问题

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

CreatedOn列属于哪个表? – 2010-04-01 13:56:19

+0

对不起,发布错误。现在更新。 – PositiveGuy 2010-04-01 14:09:32

回答

1

那是什么top 1在那里做?如果你只想要一个行则TOP(1)必须是第一位的:

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

顶部是因为我想只抓住最新条目插入..不知道它的ID – PositiveGuy 2010-04-01 13:53:06

+0

是啊我看你现在说什么。如果我只想要最新的记录,而不是所有的记录。我只想看到一个结果,那就是根据CreatedOn插入到现金中的最新记录。 – PositiveGuy 2010-04-01 13:54:43

+0

每个交易的现金每个最新条目? – 2010-04-01 13:54:48

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

,但也会抓住结果集中TransactionInfo的所有字段?我需要看到两组字段。 – PositiveGuy 2010-04-01 13:52:48

+1

+1 - 我认为这是OP之后的事情(即仍然需要TOP 1,这只是在错误的地方) – AdaTheDev 2010-04-01 13:52:50

+1

@coffeeaddict - 你试过运行这个查询吗?从你的评论中,它确实听起来像这是你想要的。你可以尝试一下,并澄清它是否(或不)做你想做的事情? – AdaTheDev 2010-04-01 14:08:50

0

选择T。 ,c。 从(选择顶部1 *从由createdOn降序 现金顺序)C 内上c.TransactionID = t.id 顺序加入TransactionInfo吨 通过createdOn降序

不;吨使用select *尤其是与一个连接,它浪费了服务器资源。

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 

您需要从每个transactionId的现金表中查找带有最新日期的记录,并使用它在您的查询中进行过滤。