MySQL SQL質問応答スレ [無断転載禁止]©2ch.net
>>90
カツカレーの情報が、エビチリ情報テーブルに存在しないデータの持ち方ならSELECT文をUNION ALLで並べればいいだけだろ。
セレクト 列名 カレー情報 where 列名 イコール カツカレー
ユニオンALL
セレクト 列名 エビチリ情報 where 列名
イコール カツカレー
俺は答えを教えるのは本人にとってよくないと思っているから、本当は書きたない。
そもそもそのデータモデリングは自分で考えたのか? UNIONなどの集合演算子は列名が揃ってないと使えないからな >>91
おまえどう考えても勘違いしてるぞ
上塗り重ねず自重しとけ >>90
選択肢はブルートフォース、n-gram、 形態素解析、マッピングテーブルくらいかな
どれを選ぶかは用途次第
ブルートフォースは「カツカレー」というキーワードとテーブルの列名を1件1件比較して
キーワード内の部分文字列が列名に合致するかどうかを判断していく
めちゃ遅くなるけどデータ量と要求速度によってはこれでいい場合もある
n-gramで例えば文字単位で3文字ずつのまとまり(trigram)に分解すれば
「カツカレー」は「カツカ」「ツカレ」「カレー」の3つになる
この3つのキーワードともとの単語でテーブルを検索して合致するものがあるかどうか見る
形態素解析はそれ用のライブラリ使って
「カツカレー」を「カツ」と「カレー」という単語単位に分解して検索する
マッピングテーブルは
「カツカレー」というキーをマスタテーブルの「カレー」にマッピング
「カツ」にマッピングしたりする可能性もあるから1対多 動的に列名違いのSQLを組み立てるなんてありえない。 >>95 >>96
SQLで出来ないことが分かっただけでも収穫ですが
さらに解決のヒントをいただきありがとうございます
ブルートフォースって言うのですか
PHPで作ってますがロジックで判断するやり方はちらっと頭に浮かんだのですが
性能がめちゃ心配で脳内却下してました
n-gramはちょっと分かりませんでした
形態素は解析エンジンを信用しきれなくて…
というわけで力作業でマッピングテーブルを作るか
それかブルートフォースでやるか
検討したいと思います >>97
SQLでというか>>95の選択肢はどれもストアドやUDF使えばDB側でできるよ
特にブルートフォースでやるならDB側でやったほうが性能的には断然いい >>99
ストアドとかUDFとか知らなかった
教えてくれてありがとう >>101
MySQLのストアドプロシージャは最悪の仕様だから覚悟しとけ! フライとかが登録されたTestというテーブル作っておいて
whereの中に "エビフライ" ライク コンキャット( パーセントフライパーセント)
みたいな値をかく。このエビフライっていうところが検索文字列ね
これでフライがとれるだろ?こういうことじゃないの? なおSQLで書こうとするとはじかれて書き込めなかった
わかりにくいがすまん 後半のパーセントで囲まれてるフライっていう文字列はテーブルのカラム名がそこにくる それに沿った書き方すれば、'エビフライ'という文字列が与えられていて
項目中に'エビフライ'の部分文字列にマッチするレコードを見つけるという問題
'エビフライ'のどこで区切るかは指定されていない
字句解析を行うか、ブルートフォースで行うか、だろうか
ストアドでやるとすれば、各レコードの項目文字列が'エビフライ'という文字列に
部分マッチングするか検査する感じかな ソースレビューにてDISTINCTは性能劣化するのでGROUP BYに変更しろと言われましたがDISTINCTよりGROUP BYのほうが性能あがるんですか?初心者ですみません。 >>110
DISTINCTのほうが速いこともあればGROUP BYのほうが速いこともある
状況によるので実際のデータとクエリで実行計画の差と所要時間を計測して existsのほうが性能が高い可能性ありますか?3パターンを実測し1番性能が良いのを採用します。 mysqldumpでエクスポートしたらインサート文のテーブル名がすべて空なんだけど原因わかる方教えてください。
mysqlのバージョン
Ver 8.0.32 for Linux on x86_64
コマンド
mysqldump -u {user} -p -h {host} --no-create-info --skip-extended-insert {dbname} {tablename} > export.sql
エクスポート結果
insert into `` (aaa ,bbb, ccc);
insert into `` (aaa ,bbb, ccc);
insert into `` (aaa ,bbb, ccc); https://qiita.com/masayoshi0327/items/19938d1a40023a5ba159
上の真似して
select
case
when name is null or name = '' then 'name'
else name
end as name
case
when idis null or id= '' then 'id'
else id
end as id
from users;
こんな感じでセレクトしてるんだけど、なぜかカラム名まで取れて
1行目
id name
22 山田
みたいな感じの結果が帰ってきてしまう。。
なんでですかね >>114
then ‘name’とかthen ‘id’としてるからだろ スクリプト書くのもめんどくさいから表計算ソフトでやってしまう。 【2月13日】 原発上空にUFO? 【震度6強】
://egg.5ch.net/test/read.cgi/atom/1615255108/l50
kuni toshi
--------
日本 東京
日本 大阪
米国 ロス
米国 シカゴ
中国 北京
中国 上海
↓
kuni toshi
--------
日本 東京、大阪
米国 ロス、シカゴ
中国 北京、上海
初心者質問、ごめんなさい。 上記のようにgroup化したいのですが
SELECT kuni,toshi FROM テーブル名 GROUP BY kuni
では上手いきませんでした、アドバイスをお願いできませんか? >>121
ありがとうございます!
いままで2回にわけてSQL文をつくって無理やりやっていましたが、スマートにできそうです! WHERE IN で入力した順番になりません
SELECT
id,name
FROM table
WHERE id IN (3,2,1)
を流すと
1,2,3に並び替えられてしまいます
入力順のままにする方法はありますでしょうか? 3、2、1の順にしたい場合は、その順にソートするしかない すいません! order by でできるのでしょうか? 入力した順番が判らないと、その通りにはならない
DBへの格納順は指定できない
3,2,1の順が単に大きい順ということなら、order by desc で良い 入力順が、例えば2,1,3だったとしよう
その順に出力したいなら、
select * from table order by field (id , 2,1,3);
この場合も、入力順が 2,1,3 であると言う情報が必要 ORDER BY無しでINSERTされた順に出力される保証なんて無いのでは >入力順のままにする方法はありますでしょうか?
これをどううけとるか、だな SELECT * FROM users;で特定のカラムだけ抽出したくないとかできませんかね?
created_atだけ抽出したくないとか > 彼らはよく、社会に貢献したいと口にする。
> なんでも社会悪のネトウヨを自殺に追い込むことが、社会に貢献することなんだそうで。
> イジメや嫌がらせで社会に貢献できる教師や警官になるために、あえて帰化したんであって、祖国同胞を裏切ったわけではなく、心は●●人なんだそうだ。
>
> 昔は帰化すると裏切り者と呼ばれたりしたが、祖国に国籍を残したまま帰化する方法が確立された現在では、社会に貢献するためにむしろ帰化することが推奨されている。
> 拳銃所持で前科のある生粋の反日家ですら、今では普通に帰化している。
>
> ●●学会などはネトウヨ認定した日本人を盗撮して、痴漢の写真だと言ってばらまいている。
> それらの写真は、集団ストーカーに使用される。
> 彼らは集団ストーカーを、[地域で子供を守る安心安全パトロール]と称している。 なんの脈絡もなく突然こういうこと言い出す人いたら怖い >>139
昔の2ちゃんねるのデマだよ
こういう事実と異なる話で、創価学会員が全員、在日コリアンとかありえない話を信じ込む人間が一定数いる。 SELECT文の作成に困っています
下記のような2つのカラムを同一のものとして集計するヒントを頂けないしょうか?
【アンケートテーブル】
氏名 希望A 希望B
----------------------
Aさん 札幌 仙台
Bさん 大阪 福岡
Cさん 札幌 大阪
Dさん 福岡 札幌
↓
【旅行人気ランキング】
---------------------
札幌(3)
仙台(1)
大阪(2)
福岡(2) >>146
ありがとうございます
UNION で検索したら参考になりそうなサイトが沢山ヒットしました