SQL查询题解的典型应用
2007-08-20 12:58
471 查看
有三個表的結構和記錄如下:
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
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
相关文章推荐
- SQLServer2005 XML在T-SQL查询中的典型应用
- SQLServer2005 XML在T-SQL查询中的典型应用
- SQLServer2005 XML在T-SQL查询中的典型应用
- SQLServer2005 XML在T-SQL查询中的典型应用
- ---------XML在T-SQL查询中的典型应用---------------
- SQLServer2005 XML在T-SQL查询中的典型应用
- SQLServer2005 XML在T-SQL查询中的典型应用
- SQLServer2005 XML在T-SQL查询中的典型应用
- SQLServer 2005 XML 在 T-SQL 查询中的典型应用[转]
- SQL查询的高级应用
- 元函数在SQL查询中应用实例分析【续上篇】
- sql查询返回xml数据之应用【转载】
- 字符串在编号查询中的应用示例及常见问题.sql
- spring多数据源的处理 mybatis实现跨库查询 实现Myibatis动态sql跨数据库的处理 Spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样
- Linq to Sql:N层应用中的查询(下) : 根据条件进行动态查询
- 1.4.3 LINQ to SQL 对数据库应用查询表达式
- 小议sql查询返回xml数据之应用
- Linq to Sql:N层应用中的查询(下) : 根据条件进行动态查询
- 整理多个技术点的sql综合应用:(开拓思路,SELECT子句内嵌子查询)
- 查询职责及应用的SQL