トップページ⇒tech
37コメント12KB

SQLでの質問です。

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
+-- AAA ---+
| |
|a b c |
| |
|5 4 1 |
|7 4 8 |
|8 9 7 |
+----------+
このようなテーブルでカラム名「a」「b」「c」だけを取り出すSQLってどう書けば良いですか?
whereを使って書けるんですか?
0002デフォルトの名無しさんNGNG
システムカタログを見ろ。
select column_name from any_system_catalog where table_name = 'AAA'
みたいな感じだ。後は君の使ってるデータベースによって変わるから、
自分で調べな。
00031NGNG
sybase使ってますが、同根のドキュメントには書かれてないような…。
ていうか、whereでは書けないということっすか?
00041NGNG
同根→同梱
0005 NGNG
SQLって何?
上級向け用語キボンヌ
00061NGNG
ていうか、where使ってるし。
0007デフォルトの名無しさんNGNG
>>1
なんかむかつく
00081NGNG
>>7
ごめんなさい。
0009デフォルトの名無しさんNGNG
>>5
その誕生はシークゥエルというものから始まった。
いまだにSQLをシークゥエルと呼ぶアメリカ人が
いるらしい。
0010デフォルトの名無しさんNGNG
えーと、マイクロソフトのSQL-SERVERで使うSQLを
TransactSQLと呼びますが、かっこつけてサブクエリー
を使わないように。かなり速度がダウーンします。
00112NGNG
>>3
>sybase使ってますが、同根のドキュメントには書かれてないような…。

オロカモノめが。情報を求めるなら、バージョンくらい書け。
ちなみに、俺のPCに入っているSQL Anuware Studioのマニュアルにはちゃんと載ってるぞ。
SYSTABLE, SYSCOLUMNシステム・テーブルだ。
後は自分で調べろ。
00122NGNG
キミ、まさか、
SELECT a FROM aaa
と書けるかどうかを聞きたいんじゃないだろうな?
00131NGNG
バージョンは、11.0.3.3-1です。
00141NGNG
>>2
違います。それだとデータまで出力されるので×。
カラム名だけ欲しいんです。
0015デフォルトの名無しさんNGNG
カラム名って呼ぶの?
COBOLじゃないんだから
00162NGNG
>>15
>カラム名って呼ぶの?
>COBOLじゃないんだから
呼ぶよ。フツーだろ。

>>1
これで試してみそ。これが駄目なら俺は知らん。

SELECT c.column_name
FROM systable as t, syscolumn as c
WHERE t.table_id = c.table_id
AND t.table_name = 'SYSCOLUMN'
ORDER BY c.column_id
0017デフォルトの名無しさんNGNG
>>9
歴史的に説明されるのが一番理解しやすいよね。あんがと
00181NGNG
>>2
駄目でした。
ていうか、そのままコピーペーストなので駄目だったのはわかるのですが
↑のAAAのテーブルに置き換えるとどう書きますか?
システムテーブルを絡めないと、カラム名は取り出せないのですか?
馬鹿ですいません。
00192NGNG
キミのキャラ、なかなかいい味だしてるじゃないか。その調子でガムバレ。

>↑のAAAのテーブルに置き換えるとどう書きますか?
SYSCOLUMN をAAAに置き換えれば宵。

> システムテーブルを絡めないと、カラム名は取り出せないのですか?
取り出せない。
なんらかのアプリケーション(開発環境)を使えば、検索結果のレコードセットとは別に
列名も取得できる場合もある。ただし、その内部ではシステムテーブルを見てるのだ。

どのRDBMSでも、「テーブル名」や「カラム名」などというものは、「メタデータ」と呼ばれ
てて、システムテーブルやシステムカタログと呼ばれる、RDBMSが管理する領域に
保存されているのだ。

君が「何を使って」カラム名を取得したいのかを書けば、話は広がるかもしれない。
(例えばExcelで、とか、VBでとかPHPでとかだ)
00201NGNG
>>2
がんばってますが、結果が伴いません。全然駄目です。
SYSCOLUMNを置き換えても駄目でした。

カラムプレフィクス'c'が、クエリに使用されるテーブル名またはエイリアス名と
一致しません。テーブルがFROM句に指定されていないか、または、テーブルが代わりに使用
されなければならない相関名を持っています。
なんてエラーが出ます。

>どのRDBMSでも「テーブル名」や「カラム名」などというものは、uメタデータ」と呼ばれ
>てて、システムテーブルやシステムカタログと呼ばれる、RDBMSが管理する領域に
>保存されているのだ。

ということは一般ユーザーでは取り出せないですか?
sybaseでいう所のsaだと出来るんですか?
ていうかやってみます。

何を使って取り出したいもなにも,直接です。
sybase付属のisqlでです。
PHPと連携させるのですが、一応PHPにはそういう関数が有るらしいことは知ってますが。
00212NGNG
とりあえず、これをisqlにコピペしてみれ。

SELECT syscolumn.column_name
FROM systable, syscolumn
WHERE systable.table_id = syscolumn.table_id
AND systable.table_name = 'AAA'
ORDER BY syscolumn.column_id

> ということは一般ユーザーでは取り出せないですか?
> sybaseでいう所のsaだと出来るんですか?
いや、俺はSybase 11.xのことは知らんのだ。
だが、こうは言える。
systableとsyscolumnの読み取り権限のあるユーザが上のクエリーを実行できる。

sa以外のユーザがsystableとsyscolumnの読み取り権限があるかどうかは知らん。

「リファレンスマニュアル」っぽいものは無いのか?
「システムカタログ」という章はどっかに無いか?

Sybaseは5年ほど前にやっただけなので、これ以上は解らん。
00221NGNG
Msg 107, Level 15, State 1:
Line 2:
カラム・プレフィクス 'c'
Line 1:
systable が見つかりません。owner.objectname を指定するか、sp_help
を使用してオブジェクトの存在を確認してください (sp_help
ではその他のオブジェクトも表示されます)。
Msg 208, Level 16, State 1:
Line 1:
syscolumn が見つかりません。owner.objectname を指定するか、sp_help
を使用してオブジェクトの存在を確認してください (sp_help
ではその他のオブジェクトも表示されます)。
だそうです。いぃぃぃぃぃぃ。

>sa以外のユーザがsystableとsyscolumnの読み取り権限あるかどうかは知らん。
そりゃそうだ。うちの環境知らんもんねぇ。
saでも駄目でした。↑のエラー。

>「リファレンスマニュアル」っぽいものは無いのか?
一緒にrpmダウンロードしてます。

>「システムカタログ」という章はどっかに無いか?
sytemtableって所見てもよくわからんのですが
無いあたまひねってがんばるっす。。

なんでさくっとカラム名ぐらい出力せんのかねぇ。。使えねぇデータベース。。
00232NGNG
うぬ、後はマニュアルと格闘するか、Sybase 11.xに詳しい人のレスを待て!
じゃっ。
0024回答NGNG
odbc接続して、SQLDescribeCol関数を呼べば取れる。
00251NGNG
odbc接続ってなんでしか?
~
0026デフォルトの名無しさんNGNG
sp_columns AAA
0027デフォルトの名無しさんNGNG
>>10
2000ではハッシュジョインがサポートされて、改善されたらしいです。
00281NGNG
>>26
めちゃめちゃおしいけど、いらん情報までも出力されました。
00292NGNG
1は問題を解決できたらここで報告するように。
じゃっ。
00301NGNG
今のところ解決してません。
0031デフォルトの名無しさんNGNG
SQLは大文字で書くのが普通ですか?
テーブル名とカラム名は小文字?
00322NGNG
コーディングスタイルと同様、"普通"はありません。

ちなみに俺の流儀はO'Reillyの書籍に載っていたものです。
キーワードは大文字、それ以外は小文字で、
SELECT col1, col2
  FROM table_name
 WHERE col3 = 3
   AND col4 = 4
と、キーワードの後ろのスペースが縦に並ぶように書きます。

なお、
・全て小文字派
・全て大文字派
・キーワードは全て大文字、テーブル名は頭1バイトが大文字、その他は小文字派
などがいるようです。
0033デフォルトの名無しさんNGNG
>今のところ解決してません。

sp_columnsの中をのぞいてみれば?
手元に実行環境かマニュアルがあればわかるんですけど。
00341NGNG
select * from AAA where 1=2
もしくは
select * from AAA where '%' not like '%'
でした。

「1=2」の部分がどういう事なのかはまだ分かってませんが…。
0035デフォルトの名無しさんNGNG
>>34
1=2は絶対に満たすことはない。
つまり絶対に選択されない
0036デフォルトの名無しさんNGNG
select a,b,c from AAA;
どうだい?
003736NGNG
カラム名だった・・・鬱死・・
■ このスレッドは過去ログ倉庫に格納されています