- ベストアンサー
数値をNUMBER型にするかCHAR型にするか。
テーブルのカラムで、2005という文字を格納したい場合、 属性として、NUMBER型、CHAR型の選択ができると思います。 ●テーブル名 TABLE1 カラム名 A B 属性 ??? char データ 2005 XXXX ●テーブル名 TABLE2 カラム名 A C 属性 ??? char データ 2005 XXXX このカラムAが、TABLE2のAの2005という値と結合させる (結合させるためのキーとなっている場合) ということがある場合、NUMBER型での定義とchar型での定義に 速度的な観点やその他の観点で、なにか差異みたいなものはありますでしょうか? 下記のように、値を指定するところでは、シングルコーテーションが必要か不必要かというのは、あるかと思いますが、 結合自体で、差異はありますでしょうか? ■CHAR型にした場合。 select * form TABLE1,TABLE2 where A='2005' and TABLE1.A=TABLE2.A ■NUMBER型 select * form TABLE1,TABLE2 where A=2005 and TABLE1.A=TABLE2.A
- みんなの回答 (4)
- 専門家の回答
関連するQ&A
- SQL文について
テーブルの結合について教えてください。 (DBはオラクルです) select * from table1,table2 where table1.カラム名=table2.カラム名; で、結合が出来ることは分かりました。 やりたいことはテーブルの結合と、ある期間のデータを持ってきたいのです。 select カラム名 from table1 where カラム名 between '20020213' and '20020218'; で期間を決めて引き出すやり方も分かっています。 一度に結合と期間を決めて引き出すやりかたってどうすればよいですか? それとも不可能ですか? 教えてください。
- ベストアンサー
- その他(プログラミング・開発)
- Oracleのupdate文について
OracleでテーブルB、Cを結合し取得できた項目で、テーブルAを更新したいのですがSQLがわかりません。結合結果とテーブルAは1:1にはなりません。 件数が結合結果>テーブルAの時もあれば、その逆の場合もあります。また、複数項目を更新したいです。実行して考えてみたいのですが、明朝客先ですぐに実行しなければならず(テスト環境はあるので明日そこで一旦確認後、すぐに本番環境で実行)、現在移動中→ホテル泊のため余裕がありません。 ネットで下記を見つけたのですが、更新する項目に更新日時を追加したいのと、テーブルAとの紐付けやEXISTSのWHEREはテーブルBとC両方の項目に紐づけたいです。 また、テーブルAの更新条件に、テーブルB、Cにはないcolumn③に対する条件も追加したいです。 UPDATE [TABLE①] A SET (COLUMN①, COLUMN②) = ( SELECT B.COLUMN, C.COLUMN FROM [TABLE②] B, [TABLE③] C WHERE B.COLUMN = C.COLUMN AND B.COLUMN = A.COLUMN ) WHERE EXISTS ( SELECT 1 FROM [TABLE②] B2 WHERE B2.COLUMN = A.COLUMN) もろもろとわかりづらい説明&他力本願で心苦しいのですが、どなたか教えていただけないでしょうか?
- 締切済み
- Oracle
- Select文で結合した時に、重複カラムが存在するのでテーブル名を先頭
Select文で結合した時に、重複カラムが存在するのでテーブル名を先頭か末尾に自動でカラム名に付与して表示したいのですが、いい方法はないでしょうか? (asで1個1個変えるのではなく・・・) SELECT TABLE_A.*,TABLE_B.* FROM TABLE_A LEFT JOIN TABLE_B ON TABLE_B.ID = TABLE_A.ID 表示 : TABLE_A_ID | TABLE_B_ID みたいのを考えています。
- ベストアンサー
- MySQL
- 複数テーブルからデータを取り、updateする
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1211685 にも同じような質問があったのですが、同様の処理でうまくupdateされません。分かる方がいらっしゃいましたら教えてください。 今、テーブルが2つ(table1、table2)があり、それぞれ2つのカラム(column1、column2)を持っています。ここで、それぞれのカラム2が等しく、カラム1が指定した値のレコードのみ値をupdateしたいです。 update table1 set column1 = 'AAA' from table1,table2 where table1.column2 = table2.column2 and table1.column1 = 'BBB' and table2.column1 = 'CCC' としたところ、「from table1,table2 where 」の辺りに間違いがあると表示されます。 上の例とどう違うのか分かりません。 よろしくお願いします。m(__)m
- 締切済み
- SQL Server
- SQLServer T-SQL テーブルのJOIN
こんにちは。 テーブル"TABLE_A"、"TABLE_B"があり、 各々のテーブルにカラム"COL"があります。 カラム"COL"にインデックスを作成しています。 テーブル"TABLE_A"、"TABLE_B"をカラム"COL"で結合 する際の演算子にLIKE文を用いています。"TABLE_B"の カラム"COL"に"%"を付加していますが、これが原因で "COL"のインデックスが効きません。どのようにすれば LIKE検索でインデックスを有効にすることができるの でしょうか? SELECT * FROM TABLE_A INNER JOIN TABLE_B ON TABLE_A.COL LIKE TABLE_B.COL+'%'
- ベストアンサー
- SQL Server
- distinct をexistsに変換する
distinctをexistsに変換した方がパフォーマンスが良いようで、 例えば以下の例があるとします ---------------------------------- (前)SELECT DISTINCT a.ID1, a.NAME1 FROM TABLE1 a, TABLE2 b WHERE a.ID1 = b.ID2 (後)SELECT a.ID1, a.NAME1 FROM TABLE1 a WHERE EXISTS ( SELECT 'X' FROM TABLE2 b WHERE a.ID1 = b.ID2) ---------------------------------- もっと複雑なSQLの場合、EXISTSに変換できるのでしょうか?。複雑なSQLとは、 「複数のテーブルからカラムを取得」「テーブル結合が2つ以上」「外部結合」 などのSQLで、以下に例を示します。 (例)SELECT DISTINCT a.ID1,a.NAME1,b.ID2,b.NAME2,c.ID3,c.NAME3 FROM TABLE1 a,TABLE2 b,TABLE3 c WHERE a.ID1 = b.ID1(+) AND a.ID1 = c.ID1(+)
- ベストアンサー
- Oracle
- javaにてデータ取得
JAVAカテゴリーで質問しようかこちらにしようか迷ったのですが。。。 あるテーブルを以下の様に内部結合しています。 select * from t_table a, t_table b where a.id=b.id and a.no=0 and b.no=1 この時、t_tableのあるカラムtestcolを取得したいとおもっております。 言語はjavaで、データベースはpostgreSQLです。 rs.getString("testcol"); rsはResultSetオブジェクトです。 これで、データは取得できるのですが、条件のt_tableの別名aのデータ が取得されます。別名bの方を取得したいと思い、単純に rs.getString("b.testcol"); 等としたら、「カラム名がありません」というエラーになりました。 getStringのパラメータとして、カラムインデックス(数値)も 指定できるので、それで行うと取得可能でした。 カラムインデックス指定ですと、プログラムのメンテナンス上支障をきたす ので、なんとか、カラム名の指定で行いたいと思っておりますが、 どうすればいいのでしょうか?
- 締切済み
- その他(データベース)
- カラムの存在チェック
あるテーブルに、あるカラム(列)が存在するかどうかを調べる方法はあるのでしょうか? ・あるテーブル(TABLE_A)に、あるカラム(COLUMN_A)が存在しない場合はALTER TABLE ~ ADD でカラム(COLUMN_A)を追加する ・COLUMN_Aがある場合は何もしない というSQL文を作成したいのですが… 宜しくお願いします。
- 締切済み
- SQL Server
- テーブルの結合時に空のカラムに『NULL』を入れない方法について
宜しくお願いします。 MySQLでleft joinでテーブルの結合を行った際に、表示に必要なカラムのみを定義した場合に、空のカラムに『NULL』が入ってしまい、絞込みで検索時にこの『NULL』が邪魔になり、きちんと検索できません。left joinでテーブルを結合する場合に空のカラムに『NULL』が入らない様にする方法はありますか? クエリ文 select a.column1,b.column2 from a left join b on a.column3 = b.column3 where column2 like '%%'; 上記の様に検索した場合、likeで曖昧検索の上、検索内容を指定していないので、全データが検索されるかと思ったのですが、テーブルbのcolumn2が空のカラムは検索されず、HIT数が減ります。このwhereは必須で、どうしても入れなければならない状況なので、空のカラムも検索する方法があると助かります。 何卒、ご教授の程、宜しくお願いします。
- ベストアンサー
- MySQL
- インラインビューの更新権限について
UPDATE句をインラインビューを使って実施しようと思い UPDATE ( SELECT A.FLD1,B.FLD2 FROM TBL1 A,TBL2 B WHERE A.KEY1=B.KEY1 AND CONCAT(A.KEY2,A.KEY3)=B.KEY2 AND B.KEY2='12345') C SET C.FLD1=C.FLD2 のようにSQLを書きました。 ORA-01779: キー保存されていない表にマップする列は変更できません のメッセージが出力されました。 CREATE VIEW TEST AS SELECT A.FLD1,B.FLD2 FROM TBL1 A,TBL2 B WHERE A.KEY1=B.KEY1 AND CONCAT(A.KEY2,A.KEY3)=B.KEY2 AND B.KEY2='12345' でビューを作って確認したら select * from user_updatable_columns where table_name='TEST'; OWNER TABLE_NAME COLUMN_NAME UPDATA INSERT DELETA ---------- ----------- --------------- ------ ------ ------ TEST TEST FLD1 NO NO NO TEST TEST FLD2 NO NO NO 確かにUPDATEできないようです。 テーブルはこんな感じです。 TBL1 ------------------------------------------- KEY1 NUMBER 4 PK KEY2 NUMBER 5 PK KEY3 NUMBER 1 PK FLD1 CHAR 6 TBL2 ------------------------------------------- KEY1 NUMBER 4 PK KEY2 NUMBER 6 PK FLD2 CHAR 6 同じように TBL3 ------------------------------------------- KEY1 NUMBER 2 PK KEY2 NUMBER 4 PK KEY3 CHAR 6 PK KEY4 NUMBER 4 PK FLD3 CHAR 6 TBL4 ------------------------------------------- KEY1 NUMBER 4 PK KEY2 CHAR 6 PK FLD4 CHAR 6 でビューを作ったら CREATE VIEW TEST2 AS SELECT A.FLD3,B.FLD4 FROM TBL3 A,TBL4 B WHERE A.KEY2=B.KEY2 AND A.KEY3=B.KEY3 AND A.KEY1='12' AND A.KEY4='1234' OWNER TABLE_NAME COLUMN_NAME UPDATA INSERT DELETA ---------- ----------- --------------- ------ ------ ------ TEST TEST2 FLD3 YES YES YES TEST TEST2 FLD4 NO NO NO 更新可能なようです。 ビューを作ったとき、UPDATEやINSERT文が有効・無効になる違いは何でしょうか? 毎回一旦ビューを作って select * from user_updatable_columns where table_name='TEST'; のような確認しかできないのでしょうか? よろしくお願いいたします。
- 締切済み
- Oracle
- iprint&Scanで製品が選択できないというトラブルについての相談です。
- Windows11でiprint&Scanを使用している際に、製品が選択されておらず、エラーメッセージが表示される問題について詳しく教えてください。
- 問題の関連情報として、接続方法や使用しているソフト・アプリ、電話回線の種類も教えてください。
お礼
詳細なご回答本当にありがとうございます。