以下の検索をしたい場合SQLはどうなるのでしょうか?


Aというテーブルにa1とa2、a3、a4といったカラムがあります。

各カラムには英数字で構成された文字が格納されています。

例えば hatena という値が入っているカラム名を調べたい場合、どうしたらいいのでしょうか?SQL文をお願いいたします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/01/17 16:42:35
  • 終了:--

回答(2件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982006/01/17 17:04:57

ポイント25pt

http://www.mars.dti.ne.jp/~o-shin/new/kowaza/body530.html

DECODE$B4X?t$H(BSIGN$B4X?t$NL%NO(B - ORACLE$B>.5;H"(B

SELECT DECODE(a1,’hatena’,’a1’),DECODE(a2,’hatena’,’a2’),DECODE(a3,’hatena’,’a3’),DECODE(a4,’hatena’,’a4’)

FROM A

WHERE

a1 = ’hatena’ OR a2 = ’hatena’ OR a3 =’hatena’ OR a4 =’hatena’


このようにすれば、それぞれレコードごとに hatena という値が 入っているカラム名が 表示されます。

id:esecua

回答ありがとうございました。

何回か試してみましたがエラーが出てしまいます。ところでDECODE関数は暗号化された値を復元するものと聞きましたがなぜこの関数でカラム名が表示されるのでしょうか?

2006/01/17 17:26:12
id:ictelnet No.2

ictelnet回答回数35ベストアンサー獲得回数02006/01/17 17:26:34

ポイント25pt

言語内でフェッチしたら駄目なんですかね? まともにやろうとすると無理っぽいのですが、今回の与えられた条件であれば、書くことはできます。

-----SQL FOR ORACLE ---------

SELECT CNAME FROM (

SELECT CNAME,DCLM FROM

(SELECT ’a1’ CNAME,a1 DCLM FROM A

UNION ALL

SELECT ’a2’ CNAME,a2 DCLM FROM A

UNION ALL

SELECT ’a3’ CNAME,a3 DCLM FROM A

UNION ALL

SELECT ’a4’ CNAME,a4 DCLM FROM A

) ALLCLMDATA

WHERE DCLM LIKE ’%hatena%’

) GROUP BY CNAME

-------END OF SQL---------


-------DML START ---------

Drop Table A;

Create Table A (

a1VARCHAR2 (50)not null,

a2VARCHAR2 (50)null,

a3VARCHAR2 (50)null,

a4VARCHAR2 (50)null

)

;


Alter Table A ADD CONSTRAINT PK_A Primary Key (

a1

);

---------DML END ---------


----------DATA (CSV) -----

”AAAA”,”BBBB”,”CCCC”,”EDD”

”CDE”,”DD”,”EESS”,”EEE”

”VVVDD”,”DCDD”,”EEEE”,”SSSS”

”HATENA”,”HAHAHA”,”WAHAHA”,”SHIDHF”

”hatena”,”SSSS”,”EEEEE”,”DDDD”

”DDDDD”,”hatena”,”EEEEE”,”DDDCC”

”WWWW”,”EEEEE”,”ERERE”,”CCCCC”

------- DATA END --------

------- RESULT ----------

CNAME

-----

a1

a2

------- RESULT END ------


以上のようになりますが、カラム名がn個というように不特定であったりすると難しいように思えます。

id:esecua

回答ありがとうございます。

残念ながら使用しているDBはMySQLなんです。ん〜やっぱり無理なんでしょうか?

ありがとうございました。

2006/01/17 17:40:33
  • id:taknt
    DECODEは オラクルで使用できるものですね。

    単純に
    SELECT * FROM A
    WHERE
    a1 = ’hatena’ OR a2 = ’hatena’ OR a3 =’hatena’ OR a4 =’hatena’

    ってのでは ダメ?

  • id:lovemaker
    終わるの早すぎだー

    Mysqlのコード書いたのに(´・ω・`)
  • id:esecua
    Re:終わるの早すぎだー

    >Mysqlのコード書いたのに(´・ω・`)

    ごめんなさい、急でしたので結果が分かったしだいで終了させていただきました。次回、よろしくお願いいたします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません