初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2022-08-26 17:14:08

ゆかり
Guest

ExecuteSQLについて

質問させて下さい。
ExecuteSQL( "SELECT MAX(ID),\"商品ID\" FROM \"在庫マスター\" WHERE FLG=1 GROUP BY \"商品ID\"";"|";"¶")
とすると正常に取得できます。
ExecuteSQL( "SELECT MAX(ID),\"商品ID\",\"商品名\" FROM \"在庫マスター\" WHERE FLG=1 GROUP BY \"商品ID\"";"|";"¶")
とすると「?」になってしまいます。
何度確認しても「商品名」はフィールドにあります。
何度見直しても解決策がみつかりません。
どなたかご存じの方いらっしゃいましたらお願いします(m__m)

----ゆかり
FMP19.5.2

#2 2022-08-26 17:36:17

あああ
Guest

Re: ExecuteSQLについて

group byに\"商品名\"も必要?

#3 2022-08-26 17:41:58

ゆかり
Guest

Re: ExecuteSQLについて

あああ wrote:

group byに\"商品名\"も必要?

[quote様ご返信ありがとうございます。
いえGROUP BY句は「商品ID」だけでグルーピングしたいので、商品IDとしております。
何かGROUP BY句の使い方を間違えているでしょうか?

---ゆかり

#4 2022-08-26 17:45:41

ゆかり
Guest

Re: ExecuteSQLについて

あっ当然、在庫数も必要なのです。
MAX(ID),商品ID,商品名,在庫数
が取得したい内容となります。
---ゆかり

#5 2022-08-26 17:58:40

あああ
Guest

Re: ExecuteSQLについて

group by句ってselectした列入れないとエラー出ませんでしたっけ?
ゆかりさんのエラーが出ている方の場合でしたら商品IDと商品名が必要な気が

#6 2022-08-26 18:13:46

ゆかり
Guest

Re: ExecuteSQLについて

あああ wrote:

group by句ってselectした列入れないとエラー出ませんでしたっけ?
ゆかりさんのエラーが出ている方の場合でしたら商品IDと商品名が必要な気が

ありがとうございます。
うまく表示できました。
MySQLのSQL文で通っていたのでわからなかったです。
ファイルメーカー固有の書き方でしょうか?

---ゆかり

#7 2022-08-26 20:58:09

himadanee
Guest

Re: ExecuteSQLについて

それはMySQLの方が固有の書き方でしょう。

#8 2022-08-27 07:08:33

ゆかり
Guest

Re: ExecuteSQLについて

himadanee wrote:

それはMySQLの方が固有の書き方でしょう。

なるほどそうなのですね。
MySQLしか使ってこなかったので気がつきませんでした~
すごく勉強になりました。

改めてありがとうございます(m__m)

---ゆかり

#9 2022-08-27 09:00:18

himadanee
Guest

Re: ExecuteSQLについて

あれ?解決したんですか?
>MAX(ID),商品ID,商品名,在庫数
在庫数も集計するんでなければGROUPに必要です。
つまり、GROUPしないフィールドの値はレコードごとに違うので、集計関数を通さないと値が確定できないのです。
MySQLで通るというのは、商品IDが外部キー(別テーブルの主キー)で商品名は外部テーブルの値から持ってくるのを、FROMに書かないでも自動的にやってくれるのかなあ?FROMがビューか別のSQLになってるとかですか?

商品IDごとにIDがMAXなレコードを商品名と在庫数を含めて取得する、なら全く別のSQLが必要になるでしょう。
ExecuteSQL( "
SELECT \"ID\",\"商品ID\",\"商品名\",\"在庫数\"
FROM \"在庫マスター\"
WHERE FLG=1
AND
ID IN (SELECT MAX(\"ID\") FROM \"在庫マスター\" GROUP BY \"商品ID\"")
;"|";"¶")
かな?
WHERE FLG=1
をINの中の方にも入れないとだめかな。

#10 2022-08-27 11:58:38

koko009
Guest

Re: ExecuteSQLについて

#11 2022-08-27 13:12:39

ゆかり
Guest

Re: ExecuteSQLについて

himadanee wrote:

あれ?解決したんですか?
>MAX(ID),商品ID,商品名,在庫数
在庫数も集計するんでなければGROUPに必要です。
つまり、GROUPしないフィールドの値はレコードごとに違うので、集計関数を通さないと値が確定できないのです。
MySQLで通るというのは、商品IDが外部キー(別テーブルの主キー)で商品名は外部テーブルの値から持ってくるのを、FROMに書かないでも自動的にやってくれるのかなあ?FROMがビューか別のSQLになってるとかですか?

商品IDごとにIDがMAXなレコードを商品名と在庫数を含めて取得する、なら全く別のSQLが必要になるでしょう。
ExecuteSQL( "
SELECT \"ID\",\"商品ID\",\"商品名\",\"在庫数\"
FROM \"在庫マスター\"
WHERE FLG=1
AND
ID IN (SELECT MAX(\"ID\") FROM \"在庫マスター\" GROUP BY \"商品ID\"")
;"|";"¶")
かな?
WHERE FLG=1
をINの中の方にも入れないとだめかな。

ご返信ありがとうございます。
すみません最後まで書かなくて、SQLの間違いに気づき修正して対応させていました。
ExecuteSQL(
"SELECT \"ID\",\"商品ID\",\"商品名\",\"在庫数\" FROM \"在庫マスター\" WHERE ID IN(SELECT MAX(ID) FROM \"在庫マスター\" WHERE flg = 1 GROUP BY \"商品ID\")";"|";"¶")
最後まで書かずに解決ボタンを押さなくてすみません。以後気を付けます。
またMySQLの情報を頂きありがとうございました。
---ゆかり

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 567.67 KiB (Peak: 582.56 KiB) ]