TableA TableB
_______ _________
1, Sec1 2, 11/01/2011
2, Sec2 2
3, Sec3 5, 10/01/2011
4, Sec4 6, 10/01/2011
Select A.SecID, A.SecName, B.DateSent from tableA A
inner join tableB B on A.SecID = B.SecID
这将为Sec2返回2条记录 - 如何让它仅返回Sec2的1条记录?我尝试过使用独特而独特的但仍能得到相同的结果。
答案 0 :(得分:12)
SELECT secid, secname
FROM tableA
WHERE secid IN
(
SELECT secid
FROM tableb
)
如果您还需要来自tableB
的记录:
SELECT secid, secname, datesent
FROM (
SELECT a.secid, a.secname, b.datesent, ROW_NUMBER() OVER (PARTITION BY a.secid ORDER BY b.datesent DESC) AS rn
FROM tableA a
JOIN tableB b
ON b.secid = a.secid
)
WHERE rn = 1
ORDER BY
子句控制b
上的多个记录中的哪一个。
答案 1 :(得分:2)
您可以使用GROUP功能仅选择一行:
SELECT A.SecID, A.SecName, max(B.DateSent) DateSent
FROM tableA A
JOIN tableB B on A.SecID = B.SecID
GROUP BY A.SecID, A.SecName
答案 2 :(得分:0)
SELECT DISTINCT a.secid, a.secname
FROM tableA a, tableB b
WHERE a.secid = b.secid;
答案 3 :(得分:0)
建议的解决方案非常好。有些情况下,当其中一个表与另一个表相比非常大并且表B中的外键列没有索引时,您可能采取了一些不同的方法。