setechdiv@wiki

共通(SQL)

最終更新:

Bot(ページ名リンク)

- view
管理者のみ編集可



複数のテーブル同士を内部結合させたいときは、
どのテーブルとどの条件で内部結合しているかを明確にするため、
一つ一つの結合を括弧でくくってやる必要がある。

例1:
 「①fooテーブルから項目Fを取得したい」。
 ただし、「②fooテーブルは項目Bにおいてbarテーブルと結合している」必要がある。
 また、「③barテーブルは項目Zにおいてbazテーブルと結合している」必要がある。

①SELECT F FROM foo 
②INNER JOIN (
③bar INNER JOIN baz ON bar.Z = baz.Z
ON foo.F = bar.F

SQLServerでは、
外部結合で値の取れてこなかったやつ → NULLになっている




SELECT HOGE.*
FROM HOGE LEFT JOIN HUGA ON HOGE.ID = HUGA.ID
WHERE HUGA.ID IS NULL

LEFT JOINでとりあえず全件みられる状況を作り、
そこから結合「できなかった」ものを絞り込む。
これの応用で、「ワークテーブルHOGEにあって本テーブルHUGAにないデータ」を出し、
「HUGAにあってHOGEにないHUGAのデータに削除フラグを立てる!」ことができる!

UPDATE 本テーブル SET 削除FG = '1'
FROM 本テーブル AS HOGE LEFT JOIN 
(SELECT * FROM ワークテーブル WHERE IPアドレス = '299.299.299.299') AS HUGA
ON HOGE.NO = HUGA.NO 
WHERE HOGE.ID = 'ididid' AND HOGE.発生日 = '20110101' AND HOGE.連番 = 7
AND HUGA.NO IS NULL

これを自分で書けますか、というと、まだ書けない。
ダメダメだ―!



  • (ハイフン)やスペースを含むテーブル名、項目名の場合、多くのDBMSツールではSQLエラーが起きるので、""や''で囲っておくこと。
Accessは[]だったけど、Oracleでは""しか使えないみたい。






.
記事メニュー
ウィキ募集バナー