🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MySQL

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

Q&A

解決済

2回答

1224閲覧

MySQLエイリアスについて、エイリアスの入れ方

korororo

総合スコア7

MySQL

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

0グッド

0クリップ

投稿2021/03/31 02:52

前提・実現したいこと

SQLについて質問させてください。

エイリアスについてです。
事前情報として
TABLE1:my_items
column:id , maker_id , items_name , item_name_kana , price , keyword , modified
my_items 内容
TABLE2:carts
column:id , item_id , count
carts 内容
があります。

この2つをリレーションしてTABLEの省略のためにエイリアスを使いたいです。

長文申し訳ありませんが、
どなたか助けてください。
よろしくお願い申し上げます。

発生している問題・エラーメッセージ

#1054 - 列 'my_items.items_name' は 'field list' にはありません。

イメージ説明
ということですが、そこのカラムのコードは変えてないので、別に原因があると思いました。
何が原因か知りたいです。

該当のソースコード

SQL文

SELECT `my_items`.`items_name`, SUM(`carts`.count) FROM `my_items`,`carts` WHERE `my_items`.id=`carts`.item_id GROUP BY `carts`.item_id;

こちらはエイリアス無しで表示成功
イメージ説明

エイリアス使用後

SELECT `my_items`.`items_name`, SUM(`carts`.count) FROM `my_items` AS I,`carts` AS C WHERE `I`.id=`C`.item_id GROUP BY `C`.item_id;

→エラー

試したこと

自分でしたこと:
・最初はAS無しでmy_items は i 、carts は c にしていたが、ASを入れてみた。 →
my_items i,carts c  といった感じ
・クオートをそれぞれ消したり、付けたりした
・最初はSELECT句でエイリアスにしていたが、処理の順番を考えてFROM句でエイリアスにしてみた
・FROM句で最初に処理されるならSELECT句もエイリアスで省略できると思い、
SELECT句のTABLE名をエイリアスにしてみた
・リモートワークの上司に助言いただいて、
→LEFT JOIN でTABLEを繋いでみた
→DISTINCTを使ってみた

結果すべてエラーがでます。

補足情報(FW/ツールのバージョンなど)

バージョンはすべて最新のようです。

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

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

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

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

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

guest

回答2

0

SELECT my_items.items_name, SUM(carts.count) FROM my_items AS I,carts AS C WHERE I.id=C.item_id GROUP BY C.item_id;

my_itemsをIでエイリアスにしているわけですからSELECT句で参照するならI.items_nameですよね?
ただしC.item_idでgroup byしているならSELECT句に関係のないitems_nameは置けません

投稿2021/03/31 04:51

yambejp

総合スコア116661

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

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

korororo

2021/03/31 06:44

なるほどです! GROUP側にSELECTで参照しているカラムを置けばいいんですね。 ありがとうございました。
guest

0

ベストアンサー

FROM句でのエイリアスを指定すると、そのエイリアスでしか参照できません。
また、`は大文字/小文字を意識する必要がある場合に使用するものなので、簡潔にしたいなら敢えて指定する必要はありません。

SQL

1SELECT I.items_name, SUM(C.count) 2FROM my_items AS I, carts AS C 3WHERE I.id=C.item_id 4GROUP BY C.item_id, I.items_name

投稿2021/03/31 04:52

編集2021/03/31 04:53
sazi

総合スコア25327

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

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

korororo

2021/03/31 06:46

エイリアスは場所じゃなくて処理順序で使っていいということがよくわかりました。 また、クオートのところよくわかっていなかったので、 使わなくていいという確信がもてました。ありがとうございました! 正確なSQLまで頂けたので、BAにさせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問