サブクエリ

      2019/12/10

http://office.microsoft.com/ja-jp/access-help/HA010341462.aspx
★テーブル名の文字数の最大値は64だそうで、サブクエリをFROM句で使うときに、長さがこれを超えるとエラー(FROM句の構文エラー)になる可能性あり。

①WHERE句に使用

SELECT 受注ID
FROM 受注明細テーブル
WHERE 商品ID IN
(SELECT 商品ID FROM 商品テーブル WHERE 商品形態ID = 21)

結果 
受注ID
-------------
46608
46610
46611
…中略…
50756

※残念だけど、ONにはサブクエリは使えないようです~。だよね・・・

②SELECT句に使用

※ 顧客ごとの受注件数と全体の受注件数の差異を確認
SELECT お客様ID,COUNT(*) AS Cnt_Cust,
(SELECT COUNT(*) FROM 受注テーブル ) AS Cnt_All
FROM 受注テーブル GROUP BY お客様I

——————————

結果 
お客様ID    Cnt_Cust Cnt_All
-----------------------------------------
1 4 31465
2 8 31465
3 12 31465
…中略…
29483 1 31465

③FROM句で使用

SELECT AVG(Cnt_Detail) AS AVG_Detail
FROM
(SELECT COUNT(*) AS Cnt_Detail
FROM 受注明細テーブル
GROUP BY 受注ID ) AS SOD
———————————

結果 
AVG_Detail
----------
3

応用編

SELECT 適当
FROM hogehoge AS hh
LEFT JOIN(
  SELECT *
  FROM fugafuga AS fuga1
 INNER JOIN(
     SELECT 適当
     FROM fugafuga AS fuga2
     GROUP BY 適当
     ) AS fuga3
 ON なんか処理
 AND なんか処理
  GROUP BY 適当
) AS f
ON 適当な処理
AND 適当な処理
LEFT JOIN ・・・

 - AccessVBA開発