🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: cn.bbs.comp.database
Article #818

[MSSQL FAQ] ��ʱʹ��Cross Joins

#818
From: Galaxy��VOLUNTEERS��Database
Date: Sat, 15 Nov 2008 05:34
79 lines
4584 bytes
Q�������SQL�̳��У�cross joins����һ�������Ƽ����﷨��������������¿���ʹ��
cross joins��

A��
Cross Joins�������Ż������ÿһ�н�Ϻ�Ľ�������ζ������A��3�ж��B
��2�У�cross join�����6�еĽ�������ű�֮��û�н����κι�ϵ - ��ֻ�������
���п��ܵ���ϡ��������ʹ��cross joins������Բο�http://msdn.microsoft.com/
en-us/library/ms190690.aspx��

����һ��Σ����������A��10,000�ж��B��30,000�У���ô�����С�Ķ���������
ʹ����cross join����ô���ͻ���300,000,000�� - ����Ȼ���Ǻܺõķ�������Ȼʹ
�����������������ݿ��ܻ�ͦ���ã���

���������Ҫʹ��SQL�������ܶ౨�?��ôCross Join�ͻ�dz����á�

��������Ҫдһ�����?��ÿ���̵��ÿ����Ʒ����������������ܻ�ʹ�����´��룺

SELECT Store, Product, SUM(Sales) as TotalSales
FROM Sales
GROUP BY Store, Product

����������ǡ�����̵�û�ж�Ӧ�IJ�Ʒ�Ļ���ʾ�۸�Ϊ0�����������벻�᷵��û����
���IJ�Ʒ���С�
��cross join���ܽ�������⡣

SELECT S.Store, P.Product
FROM Stores S
CROSS JOIN Products P

�������տ���ʹ�õĴ������£�
SELECT S.Store, P.Product, ISNULL(C.TotalSales,0) as TotalSales
FROM Stores S
CROSS JOIN Products P
LEFT OUTER JOIN
    (SELECT Store, Product, SUM(Sales) as TotalSales 
     FROM Sales 
     GROUP BY Store, Product) C
ON
  S.Store = C.Store AND
  P.Product = C.Product

�ý������ʹ����������ġ�����ħ�����̡���

(A x B ) -> (C)

�����ֱ�����A��B cross join����C left outer join����A��B���������ݿ���
�ģ�C����˹��ɵõ��ı?

��һЩ��Ҫע�����Ҫ���
1. ���е�����ɸѡ��׼������ʱ�䷶Χ��/���������ͣ���Ҫ������IJ�ѯ��ʵ�֡�
2. ע���A�ͱ�B�Ľ�Ϸ�ʽ������A�������ǡ�A_ID�����B�ǡ�B_ID������ô���ջ�
�õı�C��Ӧ���� A_ID��B_ID��ϡ�
3. ���о�����ı�����������ʾ����Ŀ�������������ʾ���ֲ�Ʒ����Ҫ������ѯ
�ж��塣

���øղŵ�select�����Ϊ����
�������ֻ��Ҫ2005�꣬��ƷIDΪProductID #23����ݣ���ô�����Ӧ�����£�
SELECT S.Store, P.Product, ISNULL(C.TotalSales,0) as TotalSales
FROM Stores S
CROSS JOIN Products P
LEFT OUTER JOIN
    (SELECT Store, Product, SUM(Sales) as TotalSales 
     FROM Sales 
     WHERE TransactionDate between '1/1/2005' and '12/31/2005'
     GROUP BY Store, Product) C
ON
  S.Store = C.Store AND
  P.Product = C.Product
WHERE
  P.Product = 23

�������Ҫ��һ��������ڶ����е���ݽ���cross join֮ǰ�ȶ����е�С�Ӽ��Ȳ���
һ�¡�
--
Welcome to Database Board
��ӭ������ݿ��
http://bbs.sjtu.edu.cn/bbsdoc?board=database

�� ��Դ:����ˮ˼Դ bbs.sjtu.edu.cn��[FROM: 207.46.55.27]
Technical Details
Message-ID: <4d4HXP$ayb@bbs.sjtu.edu.cn>
Path: arc1-ca.pugleaf.net!g2news2.google.com!news2.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!news.neu.edu.cn!news.shec6.edu.cn!SJTU

Show Full Headers
Complete Article Headers
X-Google-Thread: 101948,5ebb9bc8c34fcf1b,start
X-Google-Attributes: gid101948,domainid0,public,usenet
X-Google-Language: Chinese,GB
Path: arc1-ca.pugleaf.net!g2news2.google.com!news2.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!news.neu.edu.cn!news.shec6.edu.cn!SJTU
From: Dem.bbs@bbs.sjtu.edu.cn (Galaxy��VOLUNTEERS��Database)
Newsgroups: cn.bbs.comp.database
Subject: [MSSQL FAQ] ��ʱʹ��Cross Joins
Date: 15 Nov 2008 05:34:17 GMT
Organization: ��ˮ˼Դ
Message-ID: <4d4HXP$ayb@bbs.sjtu.edu.cn>
Mime-Version: 1.0
Content-Type: text/plain; charset="gb2312"
Content-Transfer-Encoding: 8bit
X-Filename: database/M.1226727241.A
Lines: 78