SQL查询题解的典型应用

有三個表的結構和記錄如下:
tableA
ID  RID    FID
===============
1   R123   123
2   R0     456
3   R11    789 

tableB
ID  FID
========
1   12
2   123
3   789


tableC
ID  PID
========
1   R11
2   123,R0,33
3   R0,12

求一高效的SQL語句或存儲過程實現:當tableC中PID號即不存在於tableA的RID也不存在於tablcB中FID中時,將此記錄篩選出來。tablcC中的PID字段可以存儲一個或多個RID或FID號

比如,上述中要將tableC表中的ID為2的記錄篩選出來,因為PID中33是不存在的

tablcA現有幾千條記錄
tablcB現有三萬多條記錄  此表為VFP DBF數據表,現已做了個鏈接服務器,將它挂到SQL SERVER中,可以當普通SQL SERVER數據表查詢使用,不過查詢速度有點慢
tablcC現有上萬條記錄

CREATE TABLE ta(ID INT,RID VARCHAR(10),FID VARCHAR(10))
INSERT Ta SELECT 1,   'R123',   '123'
UNION ALL SELECT 2,   'R0'   ,  '456'
UNION ALL SELECT 3,   'R11'   , '789' 
CREATE TABLE tb(ID INT,FID VARCHAR(10))
INSERT Tb SELECT 1,12
UNION ALL SELECT 2,123
UNION ALL SELECT 3,789
CREATE TABLE tc(ID INT,PID VARCHAR(100))
INSERT Tc SELECT 1,   'R11'
UNION ALL SELECT 2,   '123,R0,33'
UNION ALL SELECT 3,   'R0,12'

SELECT c.*,COUNT(*) CNT FROM tc c
INNER JOIN
(
SELECT RID FROM Ta
UNION
SELECT FID FROM tb) x
ON CHARINDEX(','+x.RID+',',','+c.PID+',')>0
GROUP BY ID,PID
HAVING COUNT(*)<>LEN(REPLACE(PID,',',',,'))-LEN(PID)+1

DROP TABLE ta,tb,tc
  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值