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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

1回答

3183閲覧

mysqldumpにおけるinner joinを使った条件

nyonyosuke

総合スコア73

MySQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

1クリップ

投稿2019/03/06 11:22

下記の2つのテーブルが存在していて1つのテーブルのdumpを取得しようとしています。その際に下記の条件をつけようとしています。

Productテーブル(未来の日付あり)

iddatedataplan_id
12018-01-01たまご1
22019-09-01豚肉4
32017-04-05人参2
42016-01-06キャベツ1
52020-12-013
62021-09-02たまねぎ1

Planテーブル
|id|shop_id|person_id|data|
|:--|:--:|--:|
|1|1|1|Aセール|
|2|2|1|Bセール|
|3|2|2|特価セール|
|4|1|3|春セール|

(やりたいこと)
1.Planテーブルから特定の店舗(shop_id=1)を最初に指定する。

2.Planテーブルのshop_id=1の全id(今回はidが1と4が該当)を特定する。

3.次にProductテーブルより(plan_idが1と4の商品を取得する(たまご、豚肉、キャベツ、たまねぎが取得される)

4.(Productテーブルで)取得したplan_idで、現在時刻(2019-03-06)より未来の日付(dateのカラム)に該当する商品を取得する(豚肉、餅、玉ねぎが取得される)

5.上記取得した豚肉、餅と玉ねぎをmysqldumpする。

(試したこと)
下記のSQLを書きました。

mysqldump -u user -p -hdev-db db product --lock-tables=false --no-create-info --skip-triggers --skip-dump-date \ --where "id in (SELECT db.product.id FROM db.product INNER JOIN db.plan ON db.product.plan_id = db.plan.id WHERE (db.plan.shop_id = '1')" \ > dump.sql

こちらで上記の「3番」まで取得はできたのですが、「4番」の現時点より未来の日付での取得方法がわかりません。
こちら教えていただけますでしょうか。

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

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

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

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

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

guest

回答1

0

現在の日付や時刻の取り方がわかれば良いということでしょうか。

投稿2019/03/06 11:43

m.ts10806

総合スコア80850

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

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

nyonyosuke

2019/03/06 15:01

すいません。質問の内容がわかりにくい書き方でした。 ``` --where "db.product.date >= now())" ``` で現在の日付以上というのはわかっていますが、上記の内容を下記のmysqldumpの中でどのように書いていけばよいのかがわからずにいます。 --where を2つ並べて書いてみたが、上記の日付の公式が反映されず、shop_id=1だけが出てきてしまいます。 ``` mysqldump -u user -p -hdev-db db product --lock-tables=false --no-create-info --skip-triggers --skip-dump-date \ --where "id in (SELECT db.product.id FROM db.product INNER JOIN db.plan ON db.product.plan_id = db.plan.id WHERE (db.plan.shop_id = '1')" \ > dump.sql ```
m.ts10806

2019/03/06 21:18

now()だとタイムスタンプなので単純比較は難しいのでは、と思ったのですがそういう意味ではないのでしょうか。 私が提示したリンク先にはdate型での現在日付取得も載っています
nyonyosuke

2019/03/08 02:57

ご回答ありがとうございます。下記だと正常に現時刻からのものが取得できます。が当然shop_idが入っていないため全データの現時刻から検索されます。こちらをshop_idも入れた形で取得したいと考えています。 --where "id in (SELECT db.product.id FROM db.product INNER JOIN db.plan ON db.product.plan_id = db.plan.id WHERE (db.plan.shop_id = '1' と --where "db.prices.date >=now()" の両方の条件を付与したいと考えています。 ``` mysqldump -u user -p -hdev-db db product --lock-tables=false --no-create-info --skip-triggers --skip-dump-date \ --where "db.prices.date >=now()" \ > dump.sql ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問