不知這樣的要求,怎樣寫SQL比較簡練,比較有效率呢?
/*
DROP TABLE #MFGBasic
DROP TABLE #MFGWork
DROP TABLE #RoutingBasic
DROP TABLE #RoutingDetail
*/
Create table #MFGBasic(MFGBasicid int identity(1,1),MFGCode varchar(10))
insert into #MFGBasic select 'AAA'
insert into #MFGBasic select 'BBB'
Create table #MFGWork(MFGWorkid int identity(1,1),MFGBasicid int,WorkNO varchar(10))
insert into #MFGWork select 1,'A01'
insert into #MFGWork select 1,'A02'
insert into #MFGWork select 1,'A03'
insert into #MFGWork select 1,'A04'
insert into #MFGWork select 2,'B01'
insert into #MFGWork select 2,'B02'
insert into #MFGWork select 2,'B03'
Create table #RoutingBasic(RoutingBasicid int identity(1,1),RoutingBasicNo varchar(10),MFGCode varchar(10))
insert into #RoutingBasic select 'RA1','AAA'
insert into #RoutingBasic select 'RA2','AAA'
insert into #RoutingBasic select 'RA3','AAA'
insert into #RoutingBasic select 'RB1','BBB'
insert into #RoutingBasic select 'RB2','BBB'
insert into #RoutingBasic select 'RB3','BBB'
Create table #RoutingDetail(RoutingDetailid int identity(1,1),RoutingBasicid int,RoutingDetailNO varchar(10) ,WorkNO varchar(10))
insert into #RoutingDetail select 1,'DA1','A03'
insert into #RoutingDetail select 1,'DA1','A02'
insert into #RoutingDetail select 1,'DA1','A01'
insert into #RoutingDetail select 1,'DA1','A04'
insert into #RoutingDetail select 2,'DA2','A01'
insert into #RoutingDetail select 2,'DA2','A02'
insert into #RoutingDetail select 2,'DA2','A03'
insert into #RoutingDetail select 3,'DA1','A03'
insert into #RoutingDetail select 3,'DA1','A04'
insert into #RoutingDetail select 3,'DA1','A01'
insert into #RoutingDetail select 3,'DA1','A02'
insert into #RoutingDetail select 4,'DB1','B01'
insert into #RoutingDetail select 4,'DB1','B02'
insert into #RoutingDetail select 5,'DB2','B03'
insert into #RoutingDetail select 5,'DB2','B02'
insert into #RoutingDetail select 5,'DB2','B01'
insert into #RoutingDetail select 6,'DB3','B02'
1.#MFGBasic與#MFGWork是一對多的關系,以MFGBasicid字段關聯
2.#RoutingBasic與#RoutingDetail是一對多的關系,以RoutingBasicid字段關聯
3.#MFGBasic與#RoutingBasic是一對多的關系,以MFGCode字段關聯.
--第1個SQL:
select Count(*) from #MFGWork where MFGBasicid =(select MFGBasicid from #MFGBasic where MFGCode='AAA')
/*結果
4
*/
--第2個SQL:
select Count(*) from #RoutingDetail where RoutingBasicid =(select RoutingBasicid from #RoutingBasic where RoutingBasicNo='RA1')
/*結果
4
*/
如果第1個SQL的結果與第2個SQL的結果相等,就將RoutingBasicNo選出來。
最後的結果應該是:
/*
RoutingBasicNo
--------------
RA1
RA3
RB2
*/
簡化點說就是:
A箱里有1號,2號,3號,4號等四個球。
A箱里的球有多種排序,但不論那種排序,但必須是這四個球不能缺少一個。
上面#MFGBasic中的
AAA分別有4個WorkNo,分別是A01,A02,A03,A04
而在#RoutingBasic,
AAA分別有3種不同的排序,分別是RA1,RA2,RA3,但因為RA2少了一個WorkNo:A04,而RA1與RA3都有全部4個WorkNo,所以選了RA1,RA1出來