プロが教える店舗&オフィスのセキュリティ対策術

どうもすみません。変な質問かもしれませんが!?
「添付画像」は「makers」と「my_items」の2つのテーブルと
最後の表は その「2つ」の[テーブルを結合]した結果です。
以下のアドレスからでも「添付画像」と同じテーブルがわかりやすくご覧になれます。
http://afurieitohannei.la.coocan.jp/sns/search.htm

さて
素朴な疑問ですが
添付画像を参考に
1) mysql> SELECT * FROM makers, my_items WHERE makers.id=my_items.maker_id;
2) mysql> SELECT * FROM makers, my_items WHERE makers.id=my_items.id;
とすると 1)2) 共に「makers」と「my_items」の2つが結合されたすべての値が出力されます。

+----+----------+----------------+--------------+----+----------+--------------+-------+----------------------+-------+---------------------+
| id | name | address | tel | id | maker_id | item_name | price | keyword | sales | created |
+----+----------+----------------+--------------+----+----------+--------------+-------+----------------------+-------+---------------------+
| 1 | 山田さん | 東京都港区 | 000-111-2222 | 1 | 1 | いちご | 180 | 赤い,甘い,ケーキ | 5 | 2018-01-01 00:00:00 |
| 1 | 山田さん | 東京都港区 | 000-111-2222 | 3 | 1 | バナナ | 120 | パック,甘い,黄色 | 16 | 0000-00-00 00:00:00 |
| 2 | 斎藤さん | 北海道小樽市 | 111-222-3333 | 2 | 2 | りんご | 90 | 丸い,赤い,パイ | 20 | 2023-01-11 06:57:21 |
| 3 | 川上さん | 神奈川県横浜市 | 222-333-4444 | 4 | 3 | ブルーベリー | 200 | 袋入り,青い,眼精疲労 | 8 | 0000-00-00 00:00:00 |
+----+----------+----------------+--------------+----+----------+--------------+-------+----------------------+-------+---------------------+
4 rows in set (0.00 sec)

それで
mysql> SELECT * FROM makers, my_items WHERE makers.id=my_items. price ;
Empty set (0.00 sec)
となるのは何故ですか?

カラムの 「id」「maker_id」「 price」のカラムの「レコードの値」はすべて「数値」なので
共通点はあります。何が違うのでしょうか?
よろしくお願いいたします。

「共通点はあります。何が違うのでしょうか?」の質問画像

質問者からの補足コメント

  • へこむわー

    いつもありがとうございます。
    現在検証中ですです。
    大変助かります。
    どうもすみません。

    1) mysql> SELECT * FROM makers, my_items WHERE makers.id=my_items.maker_id;
    2) mysql> SELECT * FROM makers, my_items WHERE makers.id=my_items.id;
    とすると 1)2) 共に「makers」と「my_items」の2つが結合されたすべての値が出力されます。

      補足日時:2023/01/29 04:30
  • へこむわー

    ですが 「すべての内容が出力される」は間違いないのですが、
    1) と 2) はテーブル共通の「一意の1d」同士の検索なので
     出力内容が 1) と 2) は異なり以下となりました。 
    http://afurieitohannei.la.coocan.jp/sns/search2. …
     この場合 ( [2)]の 4番目の表ですが、 カラム表の「modified」は後で追加しました)
    この作業は
    あくまでも検索なので 1万行とかなるデータでは同じ「id」同士で検索を
    かけた場合、人は【人海戦術】しかできなため、時間がかかり、意味がない検索方法でした。

    「同業者いるかいないか」 の検索だから「maker_id」で検索することで 
    ちゃんと「仕分」された検索が可能となる。
    次に
    「makers.id」に対して「my_items. price」 で検索をかけると

      補足日時:2023/01/29 04:53
  • へこむわー

    何が出てくるか
    この最初の問いの最後に
    -------------------------------------------
    カラムの 「id」「maker_id」「 price」のカラムの「レコードの値」はすべて「数値」なので
    共通点はあります。何が違うのでしょうか?
    -------------------------------------------
    ですが「理論的」には
    WHERE makers.id=my_items. price ;
    なので 
    makers.idに対しての検索なので、
    makers.id(値:1,2,3,4)とmy_items.price(値:180,90,120,200)とで値の一致するレコードが無いので、空行が返ってくるのは当たり前 でした。

      補足日時:2023/01/29 05:03

A 回答 (1件)

デタラメなことをやってるからです。



SELECT 選択リスト FROM 表1,表2
[WHERE 条件式]

は、CROSS JOINまたはINNER JOINです。
条件式に結合条件がないと、CROSS JOIN、結合条件があるとINNER JOINになります。
INNER JOINの構文にすると、次のようになります。

SELECT 選択リスト FROM 表1
INNER JOIN 表2
ON 表1と表2の結合条件

makers.id=my_item.makers_id
→メーカーを区別するidとアイテムのメーカーidの対応付けなので、これだけが正しい

makers.id=my_items.id
→メーカーを区別するidとアイテムを区別するidでたまたま一致したデタラメな結合データが得られる。
今回はたまたま一致するものがあり、デタラメな結合結果が返された。

makers.id=my_item.price
→メーカーを区別するidとアイテムの価格がたまたま一致した場合、デタラメな結合データが得られる。
たまたま一致するものもなく、デタラメな結合結果も返されなかった。

何をやってるのか、何をやりたいのかまったく理解できません。
ネット記事、マニュアル、書籍など何も調べずにデタラメなことをやってるのは時間の無駄です。
知的好奇心で色々なことを試すのとは違い、何をやってるのか本人が分からずにデタラメをやってるのは問題です。
SQLの習得に、何ら役に立ちません。
    • good
    • 2
この回答へのお礼

ありがとうございます。
どうもすみません。
助かっています。
バカ、くそ みたいな、「でたらめな」ことをやらないと 
真実が見えてこないのかな・・です。

理論的な思考回路は私にはないです。 

くそ見たいな質問をすることで
真実に近づく・・・ですね--
 
join ですね
 次のページにありますね!

LEFT JOIN、RIGHT JOIN ---外部結合

数年前勉強した分を他の参考書で、やり直しています。

行き詰まている人はには わかりやすいのかなーですが
自己満足 かもしれませんね!?

 今後ともよろしくお願いいたします

お礼日時:2023/01/29 05:28

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

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

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