トップページ⇒tech
983コメント363KB

SQL教えてっ!! lt;3gt;

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
前スレはこちら↓
SQL教えて〜!! <2>
http://pc3.2ch.net/test/read.cgi/tech/1028653822/

関連スレは>>2-10あたりにあるかと。
0153151NGNG
不思議だ・・・。
普通プログラマとして働いていれば「データベース」を扱う機会が
少なからずあるはずなのに、この板では「SQL」に関するスレが少ないし
レス数が伸びない・・・・・・・・・。

不思議っぽ。
0154デフォルトの名無しさんNGNG
おしえてやる。シークゥェルと読むんだ。
0155デフォルトの名無しさんNGNG
なんだここ?アホの集まりじゃねーか。
0156デフォルトの名無しさんNGNG
>アホの集まりじゃねーか。

まさにオマエモナ(プププ
0157デフォルトの名無しさんNGNG
昔々、平日の〇時前後に即レスが付くと思っている奴がおったそうな
めでたくないめでたくない・・
0158デフォルトの名無しさんNGNG
SQLってのはあくまでデータ取得のための言語っていうか文法であり
コーディングしてるっていう感覚はないんだがな
0159デフォルトの名無しさんNGNG
>>151-152
なんじゃ?もしかして
ORやINを使えば良いだけのことか?


件数や合計など得る場合なんかは
プログラム側でループをしなくても一発でいくし
その他にも、使いようによっては便利だけどなぁ
0160デフォルトの名無しさんNGNG
>>151はOracleでPL/SQLでも使えよ
0161デフォルトの名無しさんNGNG
>153
SQLはデータ操作言語であり、VBやC++みたいな、何でも出来る普通の
プログラム言語に比べて定型化してるから、定番的な処理はFAQとして
蓄積されてる。
業務が変わってもDB構造の基本はほとんど変わらないのと同じ。
だからあえて2chで聞く必要も無いんじゃないの。
たまに変態的な処理をしなければならなくなった時に聞くくらいかなw
0162デフォルトの名無しさんNGNG
だね。
Oracleの掲示板よく利用してるけど、SQLの質問ってSQL入門程度の本でも分かるような超初心者的なものか
パズルとして出題できそうなほどの複雑な問合せかの2種類に殆ど分類できる。

前者については返答の後にSQL入門書買うことやんわりと薦めてるけど、そうするとお礼のレスが来る確立が下がるw
ロクに調べずに聞いてくる教えてクンだからしょうがないけど。
0163デフォルトの名無しさんNGNG
SQL2000でPL/SQLを使いたい(DBMSも言語も顧客の指定なのです(T_T)のですが、
方法を教えてください。
0164デフォルトの名無しさんNGNG
>163
無理です・・・
いやまてよ、Oracleへリンク張って・・・
アーヒャヒャ
0165デフォルトの名無しさんNGNG
>>162

「確立」が下がるのか?(w
0166デフォルトの名無しさんNGNG
SQL-99 ってどうよ?
0167デフォルトの名無しさんNGNG
Access2000でSQLのお勉強ってのは無しですか?
0168デフォルトの名無しさんNGNG
>>167
ありです。
ただ Jet の場合、ストアド使えないし
関数が VB なので基本のみにしましょう。
0169デフォルトの名無しさんNGNG
売上伝票と入金伝票という全くレイアウトの違う2つのテーブルに、
それぞれ、得意先コード・伝票日付・伝票番号があるとするでしょ?
で、その2つのテーブルを合わせて、得意先コード順+伝票日付順+伝票番号順に
並び替えるSELECT文って、どう書くの?
0170デフォルトの名無しさんNGNG
>>169
どのDBかによって違うが?
0171デフォルトの名無しさんNGNG
>>169
select
〜
from 売上伝票 a,入金伝票 b
where a.得意先コード=b.得意先コード
and a.伝票日付 = b.伝票日付
and a.伝票番号 = b.伝票番号
order by a.得意先コード,a.伝票日付,a.伝票番号
0172デフォルトの名無しさんNGNG
>>169
自然言語で記述すると、仕様がひどくあいまいに聞こえる。
他人に明確に要件を伝えられるぐらい自分が理解した時点では恐らく
問題はすでに解決しているのではないか。

・・・結局、他人に聞くよりは自分で考えてさっさとSQLを書いた方が
早い罠(w
0173デフォルトの名無しさんNGNG
>>163
客にちゃんと説明しろよ?
0174デフォルトの名無しさんNGNG
>>169
一時テーブルにINSERTする手もあるが...。
0175デフォルトの名無しさんNGNG
UNIONしろよ
0176デフォルトの名無しさんNGNG
>>168
ありがとうございます。

実は先日選挙事務所でAccess2000使って仕事してたのですが
(後援会名簿のメンテナンス)、デザインビューで定義できる範囲
を超えた複雑な抽出が必要になり、生まれて初めてSQL文を
書いてクリアしました。

それから急にSQL文に興味を持った次第です。選挙事務所に
手伝いに来てた人の誰もSQL文を書いた事がないと言っており
ました。PGはいなかったようです。

Access使ってて、デザインビューではどうしても定義できない
抽出という場面に出くわした人は相当多いのではないかと思います。
0177デフォルトの名無しさんNGNG
親テーブル 1 - n 子テーブル
親テーブルの主キーが複数
子テーブルは親テーブルの外部キーを持つ
親テーブルと子テーブルは別DB(これが問題)

ってな場合で、ある条件を満たす子供を持つ親の数が欲しい場合は、

select count(*) from (
select distinct parent_id_1, parent_id_2 from child where 条件
)

以外にやりようがあるでしょうか?
単純に言うと複数カラムでdistinctしたうえでcountしたいってことです

sybaseだとこれ動かないんですよ!(from句のsubqueryが駄目ぽい)
0178デフォルトの名無しさんNGNG
>>176
自分の場合は全くの逆っす
ORACLEやSQL鯖では、普通に出来ていた事が
ACCESSで使えなくて歯がゆい思いをしている人の一人です
こういう人も少なくは無いと思う。


>>177
select count(distinct parent_id_1, parent_id_2) from child where 条件

って通らなかったっけ?
0179177NGNG
>>178
そういう場合distinctの対象のカラムは1個までなようです。
○ select count( distinct id ) from something
× select count( distinct id_1, id_2 ) from something

なんでだろ?
0180デフォルトの名無しさんNGNG
>>179
なんでだろ?Oracleは大丈夫だ。
式にするしかなさそうだね。
0181デフォルトの名無しさんNGNG
>>179
サブクエリーかませばいいんでない?
0182デフォルトの名無しさんNGNG
>>173
釣られるな(w
0183デフォルトの名無しさんNGNG
テーブル設計についての質問です

正規化を行ったら、A,B,Cの3つのテーブルができたのですけど、データ量から
いうと、Aのテーブルがデータ全体の80〜90%くらいを占めるのです。

この場合、Aを、たとえば年度ごとに分けるなどしたほうがよいのでしょうか。
あるいは、巨大でも一つのテーブルにしておいたほうがいいのでしょうか
0184デフォルトの名無しさんNGNG
>183
ムダに複雑になるkら、基本的におすすめできない。
データ量がパフォーマンス悪化への与える影響が顕著で、それがシステムを使用する
側にとって致命的で、なおかつテーブルを分ける以外に改善する方法が無いなら
しょうがないかもしれないけど。
0185183NGNG
>>184
レスサンクスです。
テーブルの大きさを概算してみたら
1年分で
多くて1000バイトx1日あたり20くらいx365日 で
10^7バイト程度のオーダーだったので、1テーブルにします
0186デフォルトの名無しさんNGNG
>>183
つまり分けるなって事だ
0187デフォルトの名無しさんNGNG
>>183
年度をまたいだ処理を行わないならいいけど。
巨大といってもテラバイトとかじゃないんでしょ?
DBMSにもよるけど、100ギガ超とかなら良くある話なんで気にしないのがいいかも。
0188183NGNG
>>184
DBMSはPortgreSQLかMySQLです。
0189187NGNG
>>183
とりあえず、特殊なケースではなさそうなので一般的な作りこみでいい
んじゃない?
普通に正規化して。
MySQLが候補にあるってことは参照系のシステム?
0190デフォルトの名無しさんNGNG
>>189
何をもって参照系って言ってる?
ちなみにMySQLはトランザクションはあるが。
0191デフォルトの名無しさんNGNG
>>189
INSERT UPDATEの頻度がSELECTに比べて十分に小さいという点では
参照系です。
候補がpostgresqlとmysqlなのは、予算の関係です。
0192デフォルトの名無しさんNGNG
>INSERT UPDATEの頻度がSELECTに比べて十分に小さい

普通だよな
0193デフォルトの名無しさんNGNG
参照系というのは、
最初にCSVかなんかからデータを一気にテーブルに流し込んで、
あとはSELECTのみ
ってかんじかな?
0194デフォルトの名無しさんNGNG
うん。普通ぽい。
0195187NGNG
断言して無いじゃん。
DBMSの候補、質問者のスキル、スケールからなんとなく、小企業のサブシ
ステム程度かなと思っただけ。
某Oraマンセー的な発言じゃないから、あまりつっこまないで。
確かにFirebirdは好きだけど。
0196デフォルトの名無しさんNGNG
Interbaseを使っているのですが

会員ID 質問ID 解答
------ ------ ------
  aaa   01 11111
  aaa   02 22222
  bbb   01 11111
  bbb   02 33333
  ccc   01 44444
  ccc   02 22222

このようなテーブルから
質問01の解答が11111、かつ、質問02の解答が22222という会員のIDを
1度のSQLで取得したいのですが、SQLをどう書けばいいのかわかりません。

SELECT distinct 会員ID from TBL where
( 質問ID='01' and 解答='11111' ) and (質問ID='02' and 解答='22222');
ぐらいしか思いつかないのですが、もちろんこれではひとつもかかりません・・・。

1度で取得することは可能なのでしょうか?
よろしくお願いします。
0197デフォルトの名無しさんNGNG
>>196

AND と OR の意味を英和辞典で調べてみましょう。
0198デフォルトの名無しさんNGNG
>>196
そのクエリでは、質問ID='01'かつ質問ID='02'かつ解答='11111"かつ解答='22222'
と同じ。
0199デフォルトの名無しさんNGNG
>196
よくある「たての物を横にする」的SQlを使えば可能ではあると思うが、
たぶん遅いしエラーも発見しにくい気が。
回答1、回答2・・・みたいな一時テーブルを作るほうが早いんじゃね?
0200196NGNG
>>197
むぅ・・・
このSQLで引っかからないのは分かってたんだけど
他の書き方が思いつかなくて・・・。
0201デフォルトの名無しさんNGNG
>>196
「質問01の解答が11111という会員」 の一時テーブルを作る
「質問02の解答が22222という会員」の一時テーブルを作る
この二つのテーブル両方にある会員のIDを抜き出す
0202デフォルトの名無しさんNGNG
>>196
突っ込まれている意味がわかってないようなので
よく見比べてください

SELECT distinct 会員ID from TBL where
( 質問ID='01' and 解答='11111' ) OR (質問ID='02' and 解答='22222');



それとも?

SELECT * FROM
(SELECT 会員ID FROM TBL WHERE 質問ID='01' and 解答='11111') a,
(SELECT 会員ID FROM TBL WHERE 質問ID='02' and 解答='22222') b
WHERE a.会員ID = b.会員ID

をしたいのか?


SQLの考え方や、アプローチの仕方や慣れ必要なので
本などで理解を深めた方が良いかと思います
0203デフォルトの名無しさんNGNG
>>196の該当レコードは確実に0件なわけだが
0204デフォルトの名無しさんNGNG
>>196
SELECT 会員ID
FROM TBL
WHERE (質問ID = '01' AND 解答 = '11111') OR
(質問ID = '02' AND 解答 = '22222')
group by 会員ID
having count(*) >= 2

普通はinとかexistsを使う。
Interbaseにあるかは知らんが。

>>197-203
お前らの中にレベル低すぎる奴が5,6人いる。
0205デフォルトの名無しさんNGNG
>>196じゃないけど、>>204は勉強になったです。
ちなみに>>202の二つ目と>>204はどっちがいいんでしょうか。速さとか。
0206デフォルトの名無しさんNGNG
>>204
それだとさ、同じレコードがあったとき
出てきちゃうんじゃ?
まぁ普通はプライマリキー違反起きると思うけど

会員ID 質問ID 解答
------ ------ ------
  aaa   02 22222
  aaa   02 22222
  bbb   01 11111
  bbb   02 33333
  ccc   01 44444
  ccc   02 22222

0207デフォルトの名無しさんNGNG
俺はAccessでアクションクエリ使ってやった。

SELECT テーブル1.会員ID INTO Fromクエリ1
FROM テーブル1
WHERE (((テーブル1.質問ID)="01") AND ((テーブル1.解答)="11111"));

SELECT テーブル1.会員ID INTO Fromクエリ2
FROM テーブル1
WHERE (((テーブル1.質問ID)="02") AND ((テーブル1.解答)="22222"));

SELECT [Fromクエリ1].[会員ID]
FROM Fromクエリ1, Fromクエリ2
WHERE ((([Fromクエリ1].[会員ID])=[Fromクエリ2].[会員ID]));

クエリでテーブル作成する手間はあるが。
0208デフォルトの名無しさんNGNG
>>196
SELECT T1.会員ID FROM テーブル AS T1, テーブル AS T2
WHERE T1.会員ID=T2.会員ID And T1.質問ID='01' And T1.解答='11111' And T2.質問ID='02' And T2.解答='22222';
0209デフォルトの名無しさんNGNG
Interbaseで使えるかどうかしらないが、普通なら
select distinct 会員ID from TBL
where 会員ID in(select distinct 会員ID from TBL where 質問ID='01' and 解答='11111')
and 質問ID='02' and 解答='22222'
と書くよ。
0210デフォルトの名無しさんNGNG
>>209
少なくとも、こんな書き方が普通とは思えない
質問が2通りだけしかないってのなら、アリかもしれないけどね
0211204NGNG
>>206
>それだとさ、同じレコードがあったとき
>出てきちゃうんじゃ?

それの答えは
>普通はinとかexistsを使う。
です。

>まぁ普通はプライマリキー違反起きると思うけど
そですね。
>>196のテーブルは会員テーブルと質問テーブルの関係テーブルだろうから。

...ってところまで書いて思いついた。
「〜問目に対する答えが〜なら〜点」のような評価する用のテーブルを用意すれば
もっと自然なSQLが書けるかもね。
0212デフォルトの名無しさんNGNG
現在顔写真付きの名簿を製作しているのですが、同一の会員番号のレコードがイメージテーブルに存在する場合(同じ人で複数の写真が登録してある場合)、写真取込日>写真貼付日>ファイル名
の最大値のレコードを対象としファイル取得するようなSQLを書きたいのですが、どのようなSQLを書けばいいのでしょうか?最初はSELECTでファイル名の取得の際に、複数レコードがあるかどうかを判別させて、
上記条件に合うレコードを持ってくるようにしたのですが、これでは上記条件に合うレコードしか引っ張ってこないので失敗でした。またWHEREで抽出できるかどうかと考えたのですが、これも上記条件のレコードのみを引っ張ってきて、
写真が複数無い人を引っ張ってきませんでした。何かいい方法はないでしょうか?

テーブルは会員登録用の下記と、
会員CD 氏名  会員区分CD
------ ------ ------
000001 モナ  000013
000002 ギコ  000013
000003 ぞぬ  000014

イメージ登録用の下記です
会員CD ファイル名 写真取込日 写真貼付日
------ ---------- ---------- ----------
000001 monakao.jpg 2003/03/01 2003/03/01
000001 monakao2.jpg 2003/03/04 2003/03/04
000002 gikokao.jpg 2003/03/04 2003/03/04
000003 zonukao.jpg 2003/03/04 2003/03/04

この二つをJOINさせて吐かせるときにモナーでmonakao2.jpgを選択して結果として下記を出したいのです。

会員CD 氏名  会員区分CD ファイル名 写真取込日 写真貼付日
------ ------ ---------- ---------- ---------- ----------
000001 モナ  000013    monakao2.jpg 2003/03/04 2003/03/04
000002 ギコ  000013    gikokao.jpg 2003/03/04 2003/03/04
000003 ぞぬ  000014    zonukao.jpg 2003/03/04 2003/03/04

お知恵を拝借できましたら幸いですます
0213デフォルトの名無しさんNGNG
>>212

意味が読みとりにくい文章だけど、、、
こんな感じ?

SELECT
会員.会員CD, 会員.氏名, 会員.会員区分CD, 最新イメージ.ファイル名, 最新イメージ.写真取込日, 最新イメージ.写真貼付日
FROM
会員,
(
SELECT * FROM (
SELECT
B.会員CD, B.写真取込日, B.写真貼付日, B.ファイル名 ,
(
SELECT COUNT(写真取込日) + 1 FROM
イメージ A
WHERE
A.写真取込日 > B.写真取込日 AND A.写真貼付日 > B.写真貼付日 AND A.ファイル名 > B.ファイル名 AND A.会員CD = B.会員CD
) AS RANK
FROM
イメージ B
) RESULT
WHERE
RESULT.RANK = 1
)最新イメージ
WHERE
会員.会員CD = 最新イメージ.会員CD
ORDER BY
会員.会員CD
0214213NGNG
>>213

あ、間違えた。
これは忘れて。
0215213NGNG
もう一回。

SELECT
会員.会員CD, 会員.氏名, 会員.会員区分CD, 最新イメージ.ファイル名, 最新イメージ.写真取込日, 最新イメージ.写真貼付日
FROM
会員,
(
SELECT D.* FROM
(
SELECT B.* FROM
(
SELECT イメージ. * FROM イメージ,
( SELECT 会員cd, MAX(写真取込日) as 最新写真取込日 FROM イメージ GROUP BY 会員cd)A
WHERE イメージ.会員cd = A.会員cd and イメージ.写真取込日 = A.最新写真取込日

)B,
( SELECT 会員cd, MAX(写真貼付日) as 最新写真貼付日 FROM イメージ GROUP BY 会員cd )C
WHERE B.会員cd = C.会員cd and B.写真貼付日 = C.最新写真貼付日

)D,
( SELECT 会員cd, MAX(ファイル名) as 最新ファイル名 FROM イメージ GROUP BY 会員cd )E
WHERE D.会員cd = E.会員cd and D.ファイル名 = E.最新ファイル名
)最新イメージ
WHERE
会員.会員CD = 最新イメージ.会員CD
ORDER BY
会員.会員CD


全然スマートじゃない&データが多いと重そう。。。
とりあえずこんなんもあるということで。
0216213NGNG
>>214
うまくいきそうです!ありがとうございますです
0217196NGNG
レスありがとうございます。

>>202
後者のやつです。
こんな書き方ができることすら知りませんでした・・・。
でもこの書き方だとエラーになるみたいです(2つ目のselectで)。
いろいろいじってみたけどInterbaseがわるいのかな?

>>204
やりたかったのはまさにこれです。
こーゆーやり方があるんですねぇ。

>>206
会員IDと質問IDをプライマリにしてます
>>208
実行できませんでした(ASのところでエラー)

なんかSQLに関して無知すぎた気がします・・・。
も少し勉強してきまつ
ありがとうございました。
0218ORANGNG
PLSQL

型番テーブル
PNO PRIMARY KEY 重複ナシ
KATANO VARCHAR2(6) 重複アリ

マスタテーブル
KATAMASTER VARCHAR2(10) 重複アリ
MAKER VARCHAR2(7)  重複アリ

結果表示
型番テーブルの「PNO」をマスタテーブルのMAKERで昇順出力すること。

KATAMASTERの先頭6桁は、KATANO(型番)
KATAMASTERの後ろ4桁は、訂符である(更新記録)。

KATANOは必ずKATAMASTERの先頭6桁とマッチする
KATAMASTERの先頭6桁が同じものであれば必ず同一のMAKERである。


できますか?私はギブアップしました。
0219213NGNG
>>218

SELECT PNO FROM 型番テーブル, マスタテーブル WHERE KATANO = LEFT(KATAMASTER, 6) ORDER BY MAKER

とかいうことではないの?
ちなみにPLSQLではLEFTじゃなくてSUBSTRかもしれない。


0220212NGNG
>>213さま
ちょっとやってみたんですが、

FROM
会員,
(
SELECT D.* FROM
(
SELECT B.* FROM
(
SELECT イメージ. * FROM イメージ,
( SELECT 会員cd, MAX(写真取込日) as 最新写真取込日 FROM イメージ GROUP BY 会員cd)A
WHERE イメージ.会員cd = A.会員cd and イメージ.写真取込日 = A.最新写真取込日

)B,
( SELECT 会員cd, MAX(写真貼付日) as 最新写真貼付日 FROM イメージ GROUP BY 会員cd )C
WHERE B.会員cd = C.会員cd and B.写真貼付日 = C.最新写真貼付日

)D,
( SELECT 会員cd, MAX(ファイル名) as 最新ファイル名 FROM イメージ GROUP BY 会員cd )E
WHERE D.会員cd = E.会員cd and D.ファイル名 = E.最新ファイル名
)最新イメージ

CとEのFROMでそれぞれ先にやった作業の結果を受けないとだめですよね?
とおもって「FROM イメージ」をそれぞれ「FROM B」と「FROM D」にしてみましたけど動かないです…

さらに別名振らないといかんのですかね?それとも全く別の回避方法があるでしょうか?
0221213NGNG
>>220

また間違ってたですか、、、
これはどう?

SELECT 会員.会員CD, 会員.氏名, 会員.会員区分CD, 最新イメージ.ファイル名, 最新イメージ.写真取込日, 最新イメージ.写真貼付日 FROM
会員,
(
SELECT イメージ. * FROM イメージ,
(
SELECT 会員CD, MAX(ファイル名) AS 最新ファイル名 FROM
(
SELECT イメージ. * FROM イメージ,
(
SELECT 会員CD, MAX(写真貼付日) AS 最新写真貼付日 FROM
(
SELECT イメージ. * FROM イメージ,
( SELECT 会員CD, MAX(写真取込日) AS 最新写真取込日 FROM イメージ GROUP BY 会員CD )A
WHERE イメージ.会員CD = A.会員CD and イメージ.写真取込日 = A.最新写真取込日
)B GROUP BY 会員CD

)C WHERE イメージ.会員CD = C.会員CD and イメージ.写真貼付日 = C.最新写真貼付日
)D GROUP BY 会員CD
)E WHERE イメージ.会員CD = E.会員CD and イメージ.ファイル名 = E.最新ファイル名
)最新イメージ
WHERE 会員.会員CD = 最新イメージ.会員CD ORDER BY 会員.会員CD

しかし重そう。
だれかスマートなやりかた教えて欲しい。
0222212NGNG
>>221
いや、やっぱり
DとBの中の「SELECT イメージ. * FROM イメージ,」がすてたはずのものを再度とってきちゃって
最終的にはファイル名の最大の物を持ってきてしまうです、その前でやってるはずの日付での抽出が無駄に…
(´・ω・`)ショボーン
0223デフォルトの名無しさんNGNG
>>212
select K.会員CD, K.氏名, K.会員区分CD, ファイル名, 写真取込日, 写真貼付日
from イメージ登録用 M INNER JOIN 会員登録用 K ON K.会員CD = M.会員CD
where exists
(SELECT * FROM (
select top 1 * from イメージ登録用 S
where M.会員CD=S.会員CD ORDER BY 写真取込日 DESC, 写真貼付日 DESC, ファイル名 DESC
) AS S
where M.ファイル名=S.ファイル名 AND M.写真取込日=S.写真取込日 AND M.写真貼付日=S.写真貼付日)

当方SQLServer
0224213NGNG
>>223
なるほど、勉強になります。

>>212
やっぱり間違ってた。スマソ
0225212NGNG
>>223
おおこれは逝けそうです、
質問ですが「select top 1 * from イメージ登録用 S」ここって
「select top 1 * from イメージ登録用 AS S」
ってことですよね?
あと
最初のSELECTで持ってきてる「ファイル名, 写真取込日, 写真貼付日」
って
「S.ファイル名, S.写真取込日, S.写真貼付日」
でよいのですよね?
0226212NGNG
>>213さま
>>223さま

ありがとうございました
223さまの方法でうまくいきました。
こんな方法があるですね、やっぱりきちんと勉強しないとダメですね>俺
0227223NGNG
>>225
>「select top 1 * from イメージ登録用 S」ここって
>「select top 1 * from イメージ登録用 AS S」
>ってことですよね?

はい。
SQLServerでは「As」は省略可能です。他は知らん。

>最初のSELECTで持ってきてる「ファイル名, 写真取込日, 写真貼付日」
>って
>「S.ファイル名, S.写真取込日, S.写真貼付日」
>でよいのですよね?

はい。
SQLServerでは使用するテーブル内でカラム名が重複しないとき、
相関名は省略可能です。他は知らん。

いずれもあったほうが可読性は増しますけどね。

>>223は検証済みですよ。一応...
0228212NGNG
>>227

ええ、ばっちし動きました、マジでありがとうございます
ASの所を聞いたのはそこのSと外のSとがあったので訳わかんなくなりそうだったんで…

ホントありがとうございました
0229223NGNG
>>228
あらほんと。まぎらわしいことやっちゃいましたね。
こんな場合いつもは違う名前つかうんだけど、ミスってしまいました。
ちゃんと動いたのはたまたまです。てへっ!
0230デフォルトの名無しさんNGNG
あり得るパターンを考えると、「イメージ登録用テーブル」に
同じ会員さんが、同日で複数登録してると「どっちやねん」って話にならない?

だから、「イメージ登録用テーブル」にユニークなキー(シーケンス)を
つけるのが一番楽でしょ


select a.会員CD, a.氏名, a.会員区分CD, b.ファイル名, b.写真取込日, b.写真貼付日
from 会員登録用 a, イメージ登録用 b,
(
select max(シーケンス) as シーケンス from イメージ登録用 group by 会員CD
) c
where a.会員CD = b.会員CD
and b.シーケンス = c.シーケンス

(未確認)
0231212NGNG
>>230
イメージのテーブルのキーに会員区分CDとファイル名が設定されていますので大丈夫かと思うです
そのために三段階でソートしたのを持ってくるですし
0232デフォルトの名無しさんNGNG
A B C の条件のどれかが一致し、かつ条件Dを満たすデータを取り出すにはどうしたらいいでしょうか?

WHERE A OR B OR C AND D
じゃないですよね?
0233デフォルトの名無しさんNGNG
WHERE (A OR B OR C) AND D
じゃないですか?
0234デフォルトの名無しさんNGNG
SQL以前の問題だ
0235デフォルトの名無しさんNGNG
日本語をそのまま書くだけじゃん…
0236デフォルトの名無しさんNGNG
初歩の初歩の簡単な簡単な論理演算くらい
できるようになれよ…(;´Д`)
つーかこんくらい論理演算と呼ぶのもおこがましいよ
0237デフォルトの名無しさんNGNG
>>235
あなたの説明はわかる人にはわかり、わからない人にはまったくわからない
無意味なものです。
わからない人がなぜわからないのかを考えなさい。
ちなみに全てのSQL文は日本語をそのまま書くだけです。

>>232
質問する前に検証しやがれこのハゲ!
知識レベル以前の問題じゃこのチ○ゲ!
0238デフォルトの名無しさんNGNG
日本語じゃなくて英語だろうな
0239237NGNG
>>238
「SQL文は日本語をそのまま書く」は
日本語をSQLに翻訳する、ということなので
変換前は英語じゃなくて日本語ですよこのハゲ!
変換後の話にしてもSQLのことを英語と呼ぶ人はいないと思いますよこのチ○ゲ!
0240デフォルトの名無しさんNGNG
>>239
お前の中の人も必死だな
0241デフォルトの名無しさんNGNG
あ、でもシンプルなサブクエリとか関数とかないSQL文ってエキサイトとかの翻訳ページで普通に翻訳できるんだよね
0242デフォルトの名無しさんNGNG
まあ、素人はEnglishQueryでも使ってなさいってこった。
0243デフォルトの名無しさんNGNG
A B C の条件のどれかが一致し、かつ条件Dを満たす
              ~~~~

読点打てただけマシだと思おうぜ
もっとひどいのが周りにイルヨー タスケテー
0244デフォルトの名無しさんNGNG
SELECTで*を使うなって言われたんだけど、何で?
0245デフォルトの名無しさんNGNG
>>244
カラムが一杯の時、メモリが無駄だから
0246デフォルトの名無しさんNGNG
>>244
全角だから
0247244NGNG
>>245
だんけ
0248デフォルトの名無しさんNGNG
>>246
正解
0249デフォルトの名無しさんNGNG
>244
ちゃんと「※」を使わなきゃだめだよ。
0250218NGNG
>>219さん
ありがとう、ちょっと修正したらできました。
0251!244NGNG
1列だけの、例えば name だけの場合
select name と
select *
では何か違う?
0252デフォルトの名無しさんNGNG
>>251
それはひどいテーブルですね。
■ このスレッドは過去ログ倉庫に格納されています