下記のsqlをサブクエリーで記述したい。
SELECT Header.*
FROM Header
WHERE (((Header.from) Like "*YouTube*") AND ((Header.subject) Like "*イージス*"));

宜しく回答願います。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

答えを先にいうと「ifをネストするようなSQLはかけます」


(ただしくはサブクエリで絞り込んでから更に絞り込む)
ただしそれはやってはいけません。
「できる」と「やったほうがいい」は違います

SQLが速く検索できるのはインデックスを利用するからです
命題のようなサブクエリで一度絞り込むと、その先にインデックスはききません
結果としてサブクエリを使うと遅くなるだけです
    • good
    • 0
この回答へのお礼

有難う御座います。

分かリました。使う以上は、早さが何事にも優先です。

お礼日時:2017/03/23 16:39

単体のSQLで処理できるのでサブクエリをつかう意味がないです。

    • good
    • 0
この回答へのお礼

有難う御座います。

多分、サブクエリを私が知らないのかもです。実は、私がサブクエリと
言うのを考えたのは。例えば、
if(a==1 && b==1){
...
}

上記の処理を下記の様に
if(a==1){
if(b==1){
...
}
}

の様にsqlでも書けたら良いなあと思った物ですから。
この様な書き方と言うのは、sqlでは書けないのでしょうか。

お礼日時:2017/03/23 06:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aと関連する良く見られている質問

Qselect from *の意味

SELECT * FROM *の意味

SELECT 〜 FROMの中に 「*」があると思いますが省略できるのでしょうか?

また*の代わりにテーブル名などをいれることができるのですか?

Aベストアンサー

SELECT と FROM の間にある「*」は一般に全カラムデータを指します
*にしない場合は個別に必要なカラム名を列記したり、式を追記します

Qfrom...where を from...join..on にするには

以下のSQL文は from ... where ... で書かれていますが
これを from ... join ... on ... で書き直したいのですが可能でしょうか?

select X.col1, U.col1

from TABLE_X as X ,TABLE_U as U

where U.REC_NO = (select B.REC_NO
from TABLE_A as A, TABLE_B as B
where A.ITME = B.ITEM
and X.DATA = A.DATA
fetch first 1 row only )

むずかしくしているのは、fetch first 1 row only なのですが
これがないと where句のかっこのなかのselect文は複数の結果を返します
しかし、その複数の結果はすべて同じものになることがデータ上保証されています

fetch first を除いて select distinct としても同じ結果となりますが
パフォーマンスがひどく低下してしまいます。

以下のSQL文は from ... where ... で書かれていますが
これを from ... join ... on ... で書き直したいのですが可能でしょうか?

select X.col1, U.col1

from TABLE_X as X ,TABLE_U as U

where U.REC_NO = (select B.REC_NO
from TABLE_A as A, TABLE_B as B
where A.ITME = B.ITEM
and X.DATA = A.DATA
fetch first 1 row only )

むずかしくしているのは、fetch first 1 row only なのですが
これがないと w...続きを読む

Aベストアンサー

on句は結合条件でfetch firstは抽出条件なのでwhere句をon句にする単純な書き直
しはできないと思います。やるとしたら副選択のselect文をfrom句に書いて一時テーブルとしてfetch firstをdistinctにするしかないような気がします

select X.col1, U.col1
from
(select distinct B.REC_NO
from TABLE_A as A, TABLE_B as B
where A.ITME = B.ITEM
and X.DATA = A.DATA) as Z
inner join TABLE_X as X on ...
inner join TABLE_U as U on ...

fetch first にくらべて distinct なので遅いような気がしますが
実際には副選択がないためにそための内部的に作られる一時表が軽くなるのでこちらのほうが速いと思います。

QLIKE *ABC* が ACCESSでは使えるのにVBからは使えない??

抽出条件に
*ABC* と書くとACCESSのクエリー上では
使えるのに、

同じMDBを対象にした
VisualBasic の レコードセット(?)

で使うと対象を持って来れません。

なぜでしょうか?

Aベストアンサー

ミドルウェア(データアクセスツール)は何をお使いでしょうか?

パターンマッチに使用するメタキャラクタ(ワイルドカード)はDAOなら、「*」ですが、ADOでは「%」です。

QAccessのクエリーで、*が入っているデータを抜出す方法って?

助けてください!
Accessのクエリーで、*が入っているデータを抜き出すのってどうやるんですか?
クエリーの元になるテーブルは1つ、非常に単純なテーブルです。
 ●フィールド1=「*」もしくはNullもしくは「英数字」
 ●フィールド2=製品番号
 ●フィールド3=メーカ番号
テーブルには上記3つのフィールドしかありません。
このテーブルの、「フィールド1に『*』が入っているデータを抜出したいのです。(抜出すのはフィールド1~3全て)
単純に選択クエリーで「抽出条件」に「“*“」と入れると、「フィールド1に英数字が入っている」行まで選択しちゃうんです。そりゃそうだよなーとは思うのですが、じゃあ、どうやったら英数字の入っている行は無視して、純粋に「*」だけの行を抜出せるのかわかりません。
誰かー!助けて―!

Aベストアンサー

*[*]*
で、"*"を含む文字列を検索できます。

"*"だけなら
[*]
です。

ワイルドカード文字を検索する時は、[]で囲みましょう。

Q【緊急】ADO で SELECT * INTO aaa From bbb で時間切れになる原因は?

SELECT * INTO 新規テーブル From テーブル元
で、新しいテーブルを作る時に時間切れになってしまいます。

自分が思いつくことは テーブル元 のテーブルを誰かが
つかんでいることぐらいなのですが、その様子はありません。

他に考えられる要因を至急教えて下さい!
SQLSERVER2000
WINDOWS2000

テーブル元の件数が関係ありますでしょうか?

Aベストアンサー

件数が関係するか調べるのであれば、

SELECT * INTO 新規テーブル From テーブル元
WHERE 1=2

のように、ありえない条件を記述して空のテーブルを作ってみれば確認できます。

件数が多いというのであれば、単純にタイムアウトしているだけでは?

排他制御でロックがかかっているということはないんですよね?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報