Microsoft Access Club Access超初心者対象Forum Access初・中級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトル2つのテーブルの全フィールドを照合
記事No82975
投稿日: 2011/09/29(Thu) 20:59
投稿者sora
OS:Windows2000
Access Version:2003

いつも、参考にさせていただいてます。
さっそくですが、ご指導いただきたく、投稿しました。

2つのテーブル
T_BBB
T_CCC

この2つのテーブルのフィールド名は、全く同じですが
フィールドの数が、110程あります。

2つのテーブルの中身データの照合をし

一致したデータと、T_BBBのみしかないデータ、T_CCCしかないデータの
各テーブルを作成したく


Dim TB_BBB As DAO.Recordset 'レコードセットの変数
Dim TB_CCC As DAO.Recordset

Set TB_BBB = DB.OpenRecordset("Select * from BBB;") 'テーブルBBB全て

While TB_BBB.EOF = False

strSQL = "SELECT CCC.* FROM CCC "
strSQL = strSQL & "WHERE (((CCC.品番)='" & TB_BBB![品番] & "') "
strSQL = strSQL & " AND ((CCC.ロット)='" & TB_BBB![ロット] & "') "
strSQL = strSQL & " AND ((CCC.数量)='" & TB_BBB![数量] & "'));"

こんな感じで、110件ほど書きましたが、【クエリが複雑】と、なってしまい
できません


件数が大量の場合の処理の仕方教えてください
宜しくお願い致します

タイトルRe: 2つのテーブルの全フィールドを照合
記事No82976
投稿日: 2011/09/30(Fri) 08:32
投稿者七誌
> こんな感じで、110件ほど書きましたが、【クエリが複雑】と、なってしまい
> できません
Accessの仕様
http://office.microsoft.com/ja-jp/access-help/HP005186808.aspx
・WHERE 句または HAVING 句内の AND の個数 99

タイトルRe: 2つのテーブルの全フィールドを照合
記事No82979
投稿日: 2011/09/30(Fri) 09:40
投稿者七誌
Dim db          As DAO.Database
Dim tdf         As DAO.TableDef
Dim Criteria(1) As String
Dim i As Integer, n As Integer, f As Integer

Set db = CurrentDb
Set tdf = db.Tabledefs("T_BBB")

f = tdf.Fields.Count \ 10 - 1

 For i = 0 To f
      
     For n = 0 To 9
         Criteria(1) = Criteria(1) & " & T_BBB.[" tdf.Fields(i * 10 + n).Name & "]"
       Next n   
      Criteria(1) = Mid$(Criteria(1), 4)       

      Criteria(0) = Criteria(0) & " AND " & Criteria(1) & " = " & Replace(Criteria(1), "T_BBB", "T_CCC")
      Criteria(1) = ""

  Next i

  n = f * 10 + 9
  f = tdf.Fields.Count - n - 1

 
  For i = 1 To f
      Criteria(1) =  Criteria(1) & " & T_BBB.[" tdf.Fields(n + i).Name & "]"
   Next i
      Criteria(1) = Mid$(Criteria(1), 4)

      Criteria(0) = Mid$(Criteria(0), 6) & " AND " & Criteria(1) & " = " &  Replace(Criteria(1), "T_BBB", "T_CCC") 

 Criteria(1) = "SELECT * INTO T_Same                    " & vbCrLf & _
                "  FROM T_BBB                            " & vbCrLf & _
                " WHERE EXISTS (SELECT 'X'               " & vbCrLf & _
                "                 FROM T_CCC             " & vbCrLf & _
                "                WHERE " & Criteria(0) & ");"  
  db.Execute Criteria(1), dbFailOnError

  Criteria(1) = Replace(Criteria(1), "EXISTS", "NOT EXISTS")
  Criteria(1) = Replace(Criteria(1), "T_Same", "T_NotInCCC")

  db.Execute Criteria(1), dbFailOnError

  Criteria(1) = Replace(Criteria(1), "T_BBB", "T_CCC")
  Criteria(1) = Replace(Criteria(1), Space$(6) & "FROM T_CCC", Space$(6) & "FROM T_BBB")
  Criteria(1) = Replace(Criteria(1), "T_NotInCCC", "T_NotInBBB")

 db.Execute Criteria(1), dbFailOnError

みたいな感じで、出来るかもしれないし、出来ないかもしれない。  
何をやっているのかサッパリ?、な状態なら忘れて貰ったほうが良い。

タイトルRe: 2つのテーブルの全フィールドを照合
記事No82980
投稿日: 2011/09/30(Fri) 11:59
投稿者スナフキン
> 2つのテーブル
> T_BBB
> T_CCC
> 
> この2つのテーブルのフィールド名は、全く同じですが
> フィールドの数が、110程あります。
> 
> 2つのテーブルの中身データの照合をし
> 
> 一致したデータと、T_BBBのみしかないデータ、T_CCCしかないデータの

違った視点で考え方のみ

SELECT
	MAX(V.Tbl_Name) AS Tbl_Name
	,COUNT(V.Tbl_Name) AS R_COUNT

	,V.A
	,V.B
	,V.C
	・・・ 110個
FROM
	(SELECT
	  "T_BBB" AS Tbl_Name
	  ,A
	  ,B
	  ,C
	  ・・・ 110個

	FROM
	  T_BBB

	UNION ALL SELECT
	  "T_CCC" AS Tbl_Name
	  ,A
	  ,B
	  ,C
	  ・・・ 110個

	FROM
	  T_CCC
	) V

GROUP BY
	,V.A
	,V.B
	,V.C
	・・・ 110個


こんなことってできたっけ^^;;
R_COUNTが2なら両方に存在
1ならTbl_Nameのみのデータ

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る