SQL初心者質問スレ [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
>>597さんのがまさに求めていたものでした!
whereかhavingで迷ってたんですがwhereだったんですね!
>>598さんも本当にありがとうございました! サイズ違いの商品を送り 返品交換できない 悪質商法 ****E
サイズ違いの商品を送り 返品交換できない 悪質商法 B**
悪質オンラインショップ
か
担当者が悪質か
2回目のでんわたんとう窓口は すりかえようで いみふにごまkして
----------------------------------
**** *** オンラインショップのアイテムは独自の方法により採寸しておりますので、
全て実際の商品を計測した実寸サイズとなっております。
ご注文いただいております商品サイズは、正しいものでございます。
誠に恐れ入りますが、サイズが合わない、イメージと異なるといったご理由での
ご購入商品の返品・交換はお断りさせていただいております。
お客様のご希望にそう事が出来ず誠に申し訳ございませんが、
何卒ご了承の程よろしくお願い申し上げます。
----------------------------------
24いんちって Mですか? WEBの説明と実際の商品が違う 今の会社があまりにもくだらなくて転職のためSQL覚えたい
今はExcelで簡単なVBA書いてる
独学でもどこかにまず入れるだろうか…
それとPostgreSQLとMySQLとどちらがいいのか教えてください >>604
安心して
いま四種類同時に使ってるから 4種類、じゃ全部視野に入れます
4つ教えてください 標準SQLを覚えるならOracle Express Editionを入れて
alter session set flagger=entry; とか >>606
oracle
srl server
mysql
postgres DB2も入れてやれ
Express-Cっていう無償のエディションもあるぞ >>607>>608>>609
ありがとうございます!
もうVlookupひとつしか使えない人たちに便利屋扱いされたうえに勝手な都合でくだらない作業詰め込まれるのはゴメンです
最初から綺麗に無駄なく作っておけばいいのに…
でもそれを更に汚くしたのは短期で来た素人自称プログラマ
VBAばかり走らせて荒っぽい処理してエラー残骸があちこちあったり重複ばかりのファイルを量産してった
プログラム覚えてもああいう仕事は絶対したくないと思う
取っ掛かりとしてSQL覚えてその次Pythonとかも覚えたいです
絶対今のところ抜け出してやる すいません、質問させてください。
mySQLとSequel Proを使ってテーブルまで作成しています。
レコード登録時に、2つのIDをくっつけて
3つめのIDをSQL内で自動生成したいのですが、
何か効率的な方法はありますでしょうか。
ID1: 100(手入力)
ID2: 101(手入力)
↓
ID3: 100101(自動生成)
データ型はいずれもINTで設定しております。
よろしくお願いします。 >>613
それ、2行登録したら1行自動生成するってこと? >>613
行列、列行なのかわからない聞き方だが、それが列、カラムだと想定すると、トリガーでも作らないとできないだろうな。
同じレコードのカラムから導出したデータを別カラムで持つのも馬鹿っぽい。
しかも数値型を連結するなら、いったん文字型に変換しないといけない。
なんでそんなことをしたいのか。ID3なんてビューを作ってみせればいいんじゃないの? >>614
>>615
すいません、DBわかってなくて失礼しました。
ID1 ID2 ID3 name
100 101 100101 hoge
101 201 101201 fuga
ID1とID2を繋げて、ID3を生成したかったです。
プライマリキーとは別に、識別用としてのユニークなIDが必要なので。
単純に繋げるには、文字列でやらないとダメみたいですね。
ありがとうございます。 ID2が2桁の時どうするの?
ID1と2と3は同じレコードのカラムなの?
手入力ってINSERT文書くの? lpad()で0埋めしてcontat で連結して castで数値にする手もあるけど
実行時に必要ならビューでいいよね >>617
ID1, 2は3桁のものしか用意しないので基本的には問題ないかと。
すべて同じレコードのカラムですね。
先に手入力と書きましたが、実際はほぼクライアントツールの
インポート経由で登録になります。
>>618
ビューってのがあるんですね、調べてみます。
ありがとうございます。 >>619
3桁で計算もしないなら、データ型が数値型なのは変だよ。 >>620
お前の根拠もない意見なんて聞いてねえから >>621
初心者は数字は数値と思い込むのはよくあることだろ。 何でこんなに質問外の話を夢中になって始めるか、理解出来ない >>624
初心者は質問内は質問外と思い込むのはよくあることだろ。 >>619
どちらも数値で桁数が3桁固定なら、ID1 * 1000 + ID2でどうだろうか number(string(id1) || string(id2)) insert時かselect時に導出すればいいようなものをなんで別カラムで持ちたがるのか、理由をまったく言わないからなw SELECT column1,column2,column3
FROM table123
WHERE column1 like '%hoge%' OR column2 like '%hoge%' OR column3 like '%hoge%'
こういうクエリがあるんですが
column1〜3で2つのキーワードのAND検索をしたい場合どう書けばいいのでしょうか?
SELECT column1,column2,column3
FROM table123
WHERE (column1 like '%hoge%' AND column1 like '%drz%')
OR (column2 like '%hoge%' AND column2 like '%drz%')
OR (column3 like '%hoge%' AND column3 like '%drz%')
以下のように書いたのですが検索できませんでした
またもっとシンプルに書く方法があれば教えてください そもそも
>(column1 like '%hoge%' AND column1 like '%drz%')
同じc1カラムにhogeとdrzの両方があるもの、というのはあってるの? 失礼しました、よく考えたら違いました
column1〜3でhoge、drzとあればいいんです
column1にhogeとあってcolumn2もしくは3にdrzとあるものを抽出したいのです
WHERE ((column1 like '%hoge%' OR column1 like '%drz%') AND (column2 like '%hoge%' OR column2 like '%drz%'))
OR ((column1 like '%hoge%' OR column1 like '%drz%') AND (column3 like '%hoge%' OR column3 like '%drz%'))
((column1 like '%hoge%' OR column1 like '%drz%') OR (column2 like '%hoge%' OR column2 like '%drz%'))
すごく長いですがこんな感じなのでしょうか?
もっと綺麗にかけないのでしょうか? RDBMS何?
正規表現使えるやつならかなり短くできるけど、、
標準でもなんとかなるかな、長くてまだよく見てないw まだやりたいこと読み切ってるわけじゃないが
ANDの部分をサブクエリにすれば同じ検索を2回書かなくて済みそうだね >>636
それだとhogeしかない場合でもマッチしてしまうんじゃないか? where column1 || column2 || column3 like '%hoge%'
and column1 || column2 || column3 like '%drz%'
でいいと思う(|| はDBごとに適切な文字列連結演算子に読み替えて)
部分一致じゃあどのみち普通のインデックスは使えないし
速度を出したいならちゃんとした全文検索機能のあるDBを使うべき >>634
WHERE column1 + ',' + column2 + ',' + column3 like '%hoge%' and column1 + ',' + column2 + ',' + column3 like '%drz%' >>640
それ column1 = 'ho', columu2 = 'ged', column3 = 'rz' でヒットしちゃうぞ >>642
連結する時に適当なセパレータ文字を挟めばいいやん。 >>636
そういうもの。
対象のカラムやキーワードの数が変わっても困らないような動的クエリの仕組みに頭を使った方がいい。 もしcolumn1/2/3が相互に交換可能なのだとしたら第一正規形ではないことになるが、
>>636だけからはデータモデルがおかしいと断言はできんだろう。 no existか積集合演算子でできるが、このSELECT文がメインだったらデータモデルがおかしい。 データモデル厨は要らんよ
まあケチ付けたいだけなんだろうけど フィールドを>>640みたいに|| で文字列連結するのって、内部で何が起こってるんですか?
ORより速いんですかね?
ORより積極的に使った方がいいですか? 内部で何が起こってるのかを気にする必要がないのがSQLの良いところやで
実行速度が気になるんだったら自分で目的に最適化したDBを作ったほうが速い まあそれは建前であって実際のところは内部動作もある程度知っていないと
使い物にならないことも多いからねえ
自動チューニング的な機能があったとしても
その機能自体がどのように動くのか知らないとやっぱり上手く使えなかったり >>641
返信遅くなってしまいすいません
文字列を連結させてればいいんですね、やってみます >>649
内部ではいったんそういう表が作られて、それを検索している。 >>649
それぞれのカラムにインデックスがある場合。
まず、文字列を連結するとインデックスは使われません。
ORを使うと、全件検索(テーブルスキャン)よりもインデックスを使う方が速いと判断されれば
インデックスが使われます。
なので、ORが使えるならORを使うのがよいです。
さらに言うと、完全一致検索(hoge = 'aaa')と前方一致検索(hoge like 'aaa%')はインデックスが
使われますが、それ以外の場合(hoge = 'aaa%', hoge = '%aaa%')では、普通はインデックスは
使われません。(データベースの種類によっては、特殊なインデックスを作れるものもある) >>657
ではどのように処理しているのかご教示を。 >>658
ループしつつ文字列比較でフィルタリングでしょ
一時テーブルなんか作るメリットゼロ >>661
一部を除いてみんな正しい
まとめると、
・レコード数が少ないなら文字列結合してLIKE検索しろ >>641
・ORと文字列結合を比較するなら、ORの方がインデックスが使われるという面で優れている
・ただしLIKE検索の場合は、前方一致のみインデックスが使われる(普通は)
・普通じゃない方法は、データベース毎に異なる(フルテキスト検索用インデックスを作ったりとか) DBはMariaDBです
issueテーブルとissueConnectionテーブルがあります
こんな風にして、階層化された複数のイシューが連なる設計です(・・・あまり設計よくないかもです)
■issue
ID
(以下略)
■issueChildren
ID
issueID
childIssueID
あるイシューの子イシューを取得したい場合、たとえば100番の子イシューであれば
SELECT * FROM issue INNER JOIN issueChildren ON issue.ID = issueChildren.ID
WHERE issueChildren.issueID = 100;
でいいと思うのですが、孫まで含めてクエリーで取得したい場合はどうすればいいのでしょうか?
要件では子と孫まででOKで、ひ孫からは不要らしいです。 孫まででいいならissueChildrenをもう一回JOINするだけ
末代まで辿りたいなら再帰問合せ もしかしてループってるかもしれないからチェックいるね >>664
具体的にどう書けばいいですか?
>>665
それはデータ的にはないようです >>666
実際にないなら良いんですけど
テーブル定義はそれを排除している訳ではないので >>668
さあね、RTRIM、LTRIMがあるからとりあえずいいだろうということなんだろ。 LTRIMって、やっぱエルトリム?
それともリトリム?
俺はどっちでもいいと思うんで、
どっちでもいいと思うんだけど。 リトリムだとRTRIMもリトリムになるし...
巻き舌とかで区別する?w 僕はシリコンバレーだけど、
エルティーアールアイエムって呼んでる うちのかあちゃん、
TRFを無理矢理トリフって読んだぞ。 伝票ID、顧客名、売上金額、売上月というテーブルがあるとします
顧客毎の各売上月の合計を問い合わせしたい場合どうすればいいのでしょうか?
売上月、顧客名、合計金額という風に出したいですが、一つ一つ顧客名毎に問い合わせするしかないのでしょうか? >>683
それぞれの顧客に電話して聞くしかないな。 select `顧客名`,`売上月`,sum(`売上金額`) as `合計金額` from TABLE
group by `顧客名`,`売上月`; SQLの神さま、み教えを!
二つのテーブルを比較し、複数項目(7項目)の値が全て合致した行の
1項目をアップデートをしたいのですが、長ったらしいSQLになってしまいます。
シンプルな記述で実現する方法は、ありますでしょうか?!
お願いします! 長ったらしくならないので下手なことをせずそのままがいいように思う Oracleだと
where (a1, a2, ...) = (b1, b2, ...)
みたいに書けちゃうけどまあ普通は
where a1 = b1 and a2 = b2 and ...
しかないな >>694
文字列にして連結して比較する作戦はどうかな? >>694
それNULL=NULLをどうするのかで問題がでる
NULLの項目があってそれをまじめに考えたら
結構長ったらしくはなる SQL Serverです。
商品No 価格1 価格2 価格調整コード 調整価格
10000 1,000 1,100 001 200
10000 1,000 1,100 002 100
10000 1,000 1,100 003 100
12000 600 700 001 50
13000 800 850 001 100
13000 800 850 003 50
価格調整コードが'001'か'002'の場合は、
調整価格を価格1に加算し、
価格調整コードが'003'の場合は、
調整価格を価格2に加算する。
その結果を、商品Noから一意で取り出せるビューにしたい。
※イメージ
商品No 価格1(調整後) 価格2 (調整後)
10000 1,300 1,200
12000 650 700
13000 900 900
これをSQLだけで作ろうとしているのですが、無理でしょうか。 ■ このスレッドは過去ログ倉庫に格納されています