none
sql server多表查询 RRS feed

  • 问题

  • create table aa
    (
     id int primary key identity(1,1),
     [name] varchar(50),
     pass varchar(50)
    )
    create table bb
    (
     id int primary key identity(1,1),
     nameB varchar(50),
     passB varchar(50)
    )

    create table cc
    (
     id int primary key identity(1,1),
     nameB varchar(50),
     passB varchar(50)
    )
    查询这几张表共有多少条数据谢谢!

    • 已移动 Raymond Tang 2010年1月19日 2:27 (发件人:.NET Framework 一般性问题讨论区)
    2010年1月19日 1:32

答案

  • select sum(rows) as 總記錄數
    from sysindexes
    where indid in(0,1) and object_Name(id) in('表名1','表名2')--加入表名
    
    --SQL2005也可用
    sys.partitions 
    以上方法效率高
    ROY WU(吳熹)
    2010年1月19日 3:16
    版主
  • DECLARE @A TABLE 
    	(Id INT PRIMARY KEY IDENTITY(1, 1), 
    	 Name VARCHAR(50), 
    	 Pass VARCHAR(50))
    	 
    DECLARE @B TABLE 
    	(Id INT PRIMARY KEY IDENTITY(1, 1), 
    	 Name VARCHAR(50), 
    	 Pass VARCHAR(50))
    	 
    DECLARE @C TABLE 
    	(Id INT PRIMARY KEY IDENTITY(1, 1), 
    	 Name VARCHAR(50), 
    	 Pass VARCHAR(50))
    	 
    INSERT INTO @A VALUES('1', '1')
    INSERT INTO @B VALUES('1', '1')
    INSERT INTO @C VALUES('1', '1')
    INSERT INTO @C VALUES('2', '2')
    
    -- 取三个表所有的行数
    SELECT COUNT(*) FROM (
    SELECT Id, NAME, Pass FROM @A UNION ALL 
    SELECT Id, NAME, Pass FROM @B UNION ALL 
    SELECT Id, NAME, Pass FROM @C ) T
    
    -- 取三个表不重复的行数
    SELECT COUNT(*) FROM (
    SELECT Id, NAME, Pass FROM @A UNION
    SELECT Id, NAME, Pass FROM @B UNION
    SELECT Id, NAME, Pass FROM @C ) T
    
    -- 取三个表 ID 不重复的行数
    SELECT COUNT(*) FROM (
    SELECT Id FROM @A UNION
    SELECT Id FROM @B UNION
    SELECT Id FROM @C) T 
    
    -- 或
    SELECT COUNT(*) FROM (
    	SELECT DISTINCT Id FROM (
    	SELECT Id, NAME, Pass FROM @A UNION
    	SELECT Id, NAME, Pass FROM @B UNION
    	SELECT Id, NAME, Pass FROM @C )T ) T2
    	
    

    知识改变命运,奋斗成就人生!
    2010年1月19日 1:53

全部回复

  • 请高手给个sql语句!
    2010年1月19日 1:33
  • 你的三张表之间有关联吗?如主外键关联 ?
    努力+方法=成功
    2010年1月19日 1:37
  • 有一个字段数值始终是相同的!如Id
    2010年1月19日 1:41
  • DECLARE @A TABLE 
    	(Id INT PRIMARY KEY IDENTITY(1, 1), 
    	 Name VARCHAR(50), 
    	 Pass VARCHAR(50))
    	 
    DECLARE @B TABLE 
    	(Id INT PRIMARY KEY IDENTITY(1, 1), 
    	 Name VARCHAR(50), 
    	 Pass VARCHAR(50))
    	 
    DECLARE @C TABLE 
    	(Id INT PRIMARY KEY IDENTITY(1, 1), 
    	 Name VARCHAR(50), 
    	 Pass VARCHAR(50))
    	 
    INSERT INTO @A VALUES('1', '1')
    INSERT INTO @B VALUES('1', '1')
    INSERT INTO @C VALUES('1', '1')
    INSERT INTO @C VALUES('2', '2')
    
    -- 取三个表所有的行数
    SELECT COUNT(*) FROM (
    SELECT Id, NAME, Pass FROM @A UNION ALL 
    SELECT Id, NAME, Pass FROM @B UNION ALL 
    SELECT Id, NAME, Pass FROM @C ) T
    
    -- 取三个表不重复的行数
    SELECT COUNT(*) FROM (
    SELECT Id, NAME, Pass FROM @A UNION
    SELECT Id, NAME, Pass FROM @B UNION
    SELECT Id, NAME, Pass FROM @C ) T
    
    -- 取三个表 ID 不重复的行数
    SELECT COUNT(*) FROM (
    SELECT Id FROM @A UNION
    SELECT Id FROM @B UNION
    SELECT Id FROM @C) T 
    
    -- 或
    SELECT COUNT(*) FROM (
    	SELECT DISTINCT Id FROM (
    	SELECT Id, NAME, Pass FROM @A UNION
    	SELECT Id, NAME, Pass FROM @B UNION
    	SELECT Id, NAME, Pass FROM @C )T ) T2
    	
    

    知识改变命运,奋斗成就人生!
    2010年1月19日 1:53
  • 谢谢

    2010年1月19日 2:02
  • select sum(rows) as 總記錄數
    from sysindexes
    where indid in(0,1) and object_Name(id) in('表名1','表名2')--加入表名
    
    --SQL2005也可用
    sys.partitions 
    以上方法效率高
    ROY WU(吳熹)
    2010年1月19日 3:16
    版主
  • select sum(rows) as 總記錄數
    from sysindexes
    where indid in(0,1) and object_Name(id) in('表名1','表名2')--加入表名
    
    --SQL2005也可用
    sys.partitions 
    
    以上方法效率高
    ROY WU(吳熹)

    这样的方法还是第一次看到,学习了,谢谢。

    知识改变命运,奋斗成就人生!
    2010年1月19日 3:32