日期:2013-04-04 浏览次数:20383 次
DISTINCT和排除复制
假如你象列出所有买过古董的ID和名字,很明显,你可能会将所有的顾客都列出来而没有考虑有些顾客是买过多讲古董的,所以这时你会发现有些数据是反复的。这就意味着你需求通知SQL来排除复制的行,而不管这个顾客买过多少个古董只需求列出一次即可。为了实现这个目的,你可以使用DISTINCT关键字。
首先我们需求为AntiqueOwners表来一个equijoin以得到顾客的LastName和First的详细数据。但是,你要考虑到Antiques表中的SellerID列是AntiqueOwners表的一个外码,所以顾客只能在AntiqueOwners表列出ID和名字的行才被列出。我们还想在列的数据中排除SellerID复制的发生,所以我们要在发生反复的列上使用DISTINCT 。
为了防止复制的发生,我们还想将LastName以字母顺序陈列,然后在按字母顺序陈列FirstName最后陈列OwnerID,因此我们还必须使用ORDER BY子句,具体语句如下:
SELECT DISTINCT SELLERID, OWNERLASTNAME, OWNERFIRSTNAME
FROM ANTIQUES, ANTIQUEOWNERS
WHERE SELLERID = OWNERID
ORDER BY OWNERLASTNAME, OWNERFIRSTNAME, OWNERID
在这个例子中,由于每团体都买都一个件古董,所以我们将Lasname以字母顺序列出所有的古董拥有者。