質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

1回答

798閲覧

色々試していますが、エラーばかりになります。 

international

総合スコア16

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

1グッド

1クリップ

投稿2023/01/07 10:13

編集2023/01/10 07:07

ありがとうございます。
1) id=1 OR id=3
2)(id=1 OR id=3)
違いですが 
1)は()がないのでORで id=3 と比較されないため
ORの影響は受けない。そのため id=1 が独り歩き
できるので id=1 と書かれ時点で、選択の対象とな
り出力される。

2)の場合()でくくった時点で、id=1とid=3 が比較され
真である id=3 が返される。 id=1 は
AND price<150 AND keyword LIKE '%赤い%'
のすべての条件を満たしていないため、出力されない。

 以下解決です。

1)SELECT * FROM my_items WHERE (id=1 OR id=3) AND price<150 AND keyword LIKE '%赤い%'
idが1か3 で、price が 150未満で、keyword に 赤い を含むレコードが存在していません。

2)SELECT * FROM my_items WHERE id=1 OR id=3 AND price<150 AND keyword LIKE '%赤い%'
id が1 もしくは idが3で price が150未満でkeywordに赤いを含むレコードは、id=1 のレコードのみです。


 以上の回答得ましたが!?
Aンス:
id が1 もしくは idが3で price が150未満でkeywordに赤いを含むレコードは、id=1 のレコードのみです。

以上ですが質問があります・
「150未満でkeywordに赤いを含むレコードは、id=1 のレコードのみ」
が正しければですが
price が150未満で・・・
SELECT * FROM my_items WHERE id=1 OR id=3 AND price<150 AND keyword LIKE '%赤い%'
と入力した場合において、以下が出力されるがおかしいと思います。

id item_name price keyword
1 いちご 180 赤い,甘い,ケーキ

 イチゴの price は「180」なので 「price<150」は
「150未満が該当する意味」だとしたら?
それが正しければ price は「180」だから違いますよね
しかし id1が出力されるのは何故ですか?

根本的に私が間違っていたなら ごめんなさいです。
よろしくお願いいたします。

以下は以前、質問内容です。

テーブル my_items の全データは id 1 2 3 4の4件です。

id item_name price keyword
1 いちご 180 赤い,甘い,ケーキ
2 りんご 90 丸い,赤い,パイ
3 バナナ 120 パック,甘い,黄色
4 ブルーベリー 200 袋入り,青い,眼精疲労

SELECT * FROM my_items WHERE id=1 OR id=3 AND price<150 AND keyword LIKE '%甘い%';
書籍には 以上をカッコでくくってくださいとあります。

結果は以下です。
id item_name price keyword

1 いちご 180 赤い,甘い,ケーキ
3 バナナ 120 パック,甘い,黄色
一応結果でました。
以下試しました。1)と2)の違いが分かりませんでした。
(id=1 OR id=3とした場合、・・値が空・・になるのは何故ですか?
よろしくお願いいたします。

1)SELECT * FROM my_items WHERE (id=1 OR id=3) AND price<150 AND keyword LIKE '%赤い%'
返り値が空でした (行数 0)。 (Query took 0.0006 seconds.)

2)SELECT * FROM my_items WHERE id=1 OR id=3 AND price<150 AND keyword LIKE '%赤い%'

id item_name price keyword
1 いちご 180 赤い,甘い,ケーキ

international👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuma.inaura

2023/01/07 10:53

解決した場合は自分で回答して解決済みにしましょう
yuma.inaura

2023/01/07 10:56

あとエラーが起こる場合はそのエラーを載せませんか?
international

2023/01/07 11:30

どうもすみません。 エラーは行き渡りばったりなので恥ずかしくて SELECT * FROM my_items WHERE (id=1 OR id=3) AND price<150 AND keyword LIKE '%甘い%' 以下が結果です。  いちごが消えました。 id item_name price keyword 編集 コピー 削除 1 バナナ 120 パック,甘い,黄色 いちごが甘いけど 150未満ではないので、削除されたのでしょうね?
guest

回答1

0

ベストアンサー

SQL

1 2create table my_items( 3 id int primary key, 4 item_name varchar(20), 5 price int, 6 keyword varchar(100)); 7insert into my_items values 8(1,'いちご',180,'赤い,甘い,ケーキ'), 9(2,'りんご',90,'丸い,赤い,パイ'), 10(3,'バナナ',120,'パック,甘い,黄色'), 11(4,'ブルーベリー',200,'袋入り,青い,眼精疲労');

ここで以下を実行すると

SQL

1SELECT * FROM my_items WHERE id=1 OR id=3 AND price<150 AND keyword LIKE '%赤い%' 2↓↓↓ 3SELECT * FROM my_items WHERE id=1 OR (id=3 AND price<150 AND keyword LIKE '%赤い%')

つまりid=1は無条件で抽出されます

投稿2023/01/10 12:03

yambejp

総合スコア117680

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

international

2023/01/11 20:14

ありがとうございます。 大変助かります。 優先順位 ですね 以前から 参考書 などには書いてはあったのですが  なかな 理解できていませんでした。 四則演算 の ()での優先順位 など 算数レベル も 当然理解はしています。  これは 組み合わせ的には ∞無限 にあるので 他 私みたいにものは 慣れるしかないみたいです。  到底 だまって 頭の中で 理解する能力、は私にはないです。 ひたすら 指を動かしながら 慣れるまで 頑張るしかないと思います。  現在 以下で 悩んでいます。   SELECT * FROM my_items WHERE (id=1 OR id=3) AND price<150 AND keyword LIKE '%赤い%' 返り値が空でした (行数 0)。 (Query took 0.0006 seconds.) SELECT * FROM my_items WHERE id=1 OR id=3 AND price<150 AND keyword LIKE '%赤い%' SELECT * FROM my_items WHERE id=1 OR (id=3 AND price<150 AND keyword LIKE '%赤い%') -------------------------------------------------------------   id item_name price  keyword 編集 コピー 削除 1 いちご   180  赤い,甘い,ケーキ ----------------------------------------------------------    取り急ぎ 明日になったら ふと気が付く感があります。 数時間 いろんなパターを 入力しました。    そのパターンは アルゴリズム 化 するしかないと思います。 詳しいことは 私も 分かりません!  今後ともよろしくお願いいたします。
international

2023/01/11 22:05

どうもすみません。 しばらくして みると なんだか見えてきました。 SELECT * FROM my_items WHERE (id=1 OR id=3) AND price<150 AND keyword LIKE '%赤い%' 対象idはi「1と3」です。150円未満で'赤い'のはありません!  なので 返り値が空でした (行数 0)。 (id=3 AND price<150 AND keyword LIKE '%赤い%')  「id 3 バナナ     120  パック,甘い,黄色 」は price<150 でも'%赤い%'にでも 該当無 です。 id1 だと  1 いちご     180  赤い,甘い,ケーキ なので 180円で '赤い' が該当する。 間違っていたなら ごめんなさいです。
yambejp

2023/01/11 23:51

たとえば複数値の内どれかということならORを使わない手もあります (id=1 OR id=3) → id in (1,3)
international

2023/01/13 19:10

大変助かります。 id in (1,3) これは 凄いですね^^ 使いたいと思います。 心強いです。 今後ともよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問