X



トップページDB@2ch掲示板
1002コメント316KB
SQL質疑応答スレ 19問目
■ このスレッドは過去ログ倉庫に格納されています
0001NAME IS NULL
垢版 |
2019/05/23(木) 20:25:40.60ID:???
このスレは
「こういうことをやりたいんだけどSQLでどう書くの?」
「こういうSQLを書いたんだけどうまく動きません><」
などの質問を受け付けるスレです。

SQLという言語はISOによって標準化されていますが
この標準を100%実装したDBMSは存在せず、
また、DBMSによっては標準でない独自の構文が
追加されていることもあります。

質問するときはDBMS名を必ず付記してください。

【質問テンプレ】
・DBMS名とバージョン
・テーブルデータ
・欲しい結果
・説明

前スレ:
SQL質疑応答スレ 18問目
https://mevius.5ch.net/test/read.cgi/db/1515071542/
0017NAME IS NULL
垢版 |
2019/05/25(土) 11:34:00.50ID:???
>>12
その商品、特定倉庫1ヶ所にしまうのかい?
0019NAME IS NULL
垢版 |
2019/05/25(土) 13:46:20.37ID:Z+RZPCej
縦横問題はRDBができて以来定番の課題&質問になってるな
PIVOTとかも使いにくいしいい加減DBMS側でうまいことしてほしいところ
0020NAME IS NULL
垢版 |
2019/05/26(日) 00:42:51.61ID:???
今なら
「ラクテンスーパーポイントスクリーン」
登録するだけでRポイント150pが貰える!

※Androidアプリのみ
iPhoneユーザーはWeb版から登録のみ可能

登録完了後に表示される招待コ一ドをお持ちですか?のところで
「i9WPjs」
を入力する

完了

祭りだ♪ヽ('∀')メ('∀')メ('∀')ノワッショイ
0021NAME IS NULL
垢版 |
2019/05/26(日) 03:38:10.70ID:2BWK9yiY
>>14
あなたは30年前からタイムマシンに乗ってやってきたのですか?
0022NAME IS NULL
垢版 |
2019/05/29(水) 11:13:10.13ID:???
>>21
30年前でもその設計はしないと思う
0023NAME IS NULL
垢版 |
2019/05/31(金) 19:07:06.33ID:???
たまには30年先から来た人に話を聞いてみたい
0024NAME IS NULL
垢版 |
2019/05/31(金) 23:38:45.60ID:5a1yvLIB
>>23
過去には行けるが未来には行けない。これが現代の常識。
0025NAME IS NULL
垢版 |
2019/05/31(金) 23:48:27.72ID:???
それだとおかしくなる
0026NAME IS NULL
垢版 |
2019/06/01(土) 00:31:01.74ID:bltHuGZw
>>25
逆にだった。時間の流れが遅いところにいると、時間の流れが速いところに戻ったときに未来にたどりつく。
0027NAME IS NULL
垢版 |
2019/06/01(土) 01:34:20.85ID:???
現在から過去に行けるなら、未来人が現在に来ることは可能だな

現代の常識だとそうなる
0028NAME IS NULL
垢版 |
2019/06/02(日) 23:01:40.17ID:???
ここSQLスレじゃなくなったん?
0030NAME IS NULL
垢版 |
2019/07/13(土) 19:26:52.20ID:AJIqdE5u
今更だが、SQLの正しい記述ってのはあるのか?
0031NAME IS NULL
垢版 |
2019/07/13(土) 20:51:42.24ID:???
今更だが、正しさとはなんだ?
0032NAME IS NULL
垢版 |
2019/07/13(土) 20:54:06.41ID:???
アメリカが正義だ
0035NAME IS NULL
垢版 |
2019/07/14(日) 08:50:25.15ID:KDHP+Bri
>>34
はい。
0037NAME IS NULL
垢版 |
2019/07/29(月) 21:32:16.54ID:???
点数テーブル
名前 日付 点数
A  7/27 50
A  7/28 70
B  7/27 80
B  7/28 90

ゲタテーブル
A  7/27 10
A  7/28 -5
B  7/27 -20
B  7/28 5

というような2つのテーブルがあって
点数をプラスマイナスした結果を出力したいのですが、どういうやり方がありますか?
今UNION ALLして、名前と日付をGROYP BYして
点数をSUMで集計しているのですが、これで問題ないでしょうか?

本当は例よりもjoinjoinしていて複雑なので、文も大分長くなってますしこれでいいのか不安になってます
0038NAME IS NULL
垢版 |
2019/07/29(月) 21:38:08.33ID:???
普通にleftjoinして加算すれば
0039NAME IS NULL
垢版 |
2019/07/29(月) 21:48:46.85ID:???
ありがとうございます!
+で繋げたら普通に足し算できたんですね・・・お恥ずかしい
ゲタのほうに該当がなかった場合点数+NULLみたいにならないか不安ですが試してみます!
0040NAME IS NULL
垢版 |
2019/07/30(火) 00:01:05.07ID:???
COALESCEなりCASEなりでNULLを0にすればいいんでない?
0042NAME IS NULL
垢版 |
2019/07/31(水) 22:15:14.94ID:???
37の意図する事が今一分からないだが、
単純に点数テーブルとゲタテーブルをマージして
Group by して sum取っちゃ拙いのか?

MySQLだとこんな具合で
select `名前`,`日付`,sum(`点数`) from (
select `名前`,`日付`,`点数` from `点数テーブル`
union
select `名前`,`日付`,`点数` from `ゲタテーブル`
) g
group by `名前`,`日付`;
0043NAME IS NULL
垢版 |
2019/07/31(水) 22:32:34.75ID:???
>>37がやってるってのがそれだろ。
しかも>>37は正しくunion all使ってるのにお前は間違えてるし。
0045NAME IS NULL
垢版 |
2019/08/01(木) 08:09:51.16ID:???
まあunionでもいいと思うが万が一ゲタ側のレコードに対応するレコードが点数テーブルにない時もレコード出力されちゃうから俺ならleft joinでやると思う
0046NAME IS NULL
垢版 |
2019/08/01(木) 20:10:22.24ID:???
>>37です。皆さんありがとうございます。参考になります
その後、LEFT JOINで書いたのですが、
点T
A 7/30 70
B 7/30 80

ゲタT
A 7/30 +10
A 7/30 -5
B 7/30 -10
というように、ゲタの対応するレコードが1件だけではなかったらしく
普通にLEFT JOINすると
A 7/30 80
A 7/30 65
B 7/30 70
のように複数行になってしまいました

サブクエリでSUMするしかないかなと考えているのですが
以下の2つのやり方でどちらが良いでしょうか?
後者のほうがシンプルで良いかなと思ってます
もしくは、もっと他に良い方法があるでしょうか?

@
SELECT 人, 日, 点+ゲタ計
FROM 点T
LEFT JOIN (
  SELECT 人, 日, SUM(ゲタ)
  FROM ゲタT
  GROUP BY 人, 日
)
ON 点T.人 = ゲタT.人
AND 点T.日 = ゲタT.日

A
SELECT 人, 日, 点+ゲタの合計
FROM (
  SELECT 人, 日, 点, SUM(ゲタ)
  FROM 点T
  LEFT JOIN ゲタT
  ON 点T.人 = ゲタT.人
  AND 点T.日 = ゲタT.日
  GROUP BY 人, 日, 点
)

見づらく恐縮なのですが、よろしくお願いします
0047NAME IS NULL
垢版 |
2019/08/01(木) 22:23:33.88ID:???
2番目のgroup by はやばい.
正誤で言えば、1番目が正しい
0049NAME IS NULL
垢版 |
2019/08/02(金) 09:43:54.13ID:???
ありがとうございます!
確かにAはおかしかったですね・・・
@のほうで書いてみたいと思います
ありがとうございました!
0050NAME IS NULL
垢版 |
2019/08/02(金) 22:05:00.81ID:???
サブクエリする必要はないけど
Aも別に間違いじゃないけどな
SELECT 人, 日, 点+SUM(ゲタ)
  FROM 点T
  LEFT JOIN ゲタT
  ON 点T.人 = ゲタT.人
  AND 点T.日 = ゲタT.日
  GROUP BY 人, 日, 点
0051sage
垢版 |
2019/08/03(土) 13:02:52.10ID:wjgyF6r3
>>47
なにがやばくてどう間違ってるのか詳しく

どう書いてもまあいいんだが、気になるなら実際のテーブル(インデックス)構成と件数で実行計画取ってみれ
0052NAME IS NULL
垢版 |
2019/09/01(日) 09:35:29.97ID:???
date player score weekAve
2019-09-01 A 80 ?
2019-09-01 B 67 ?
2019-09-01 C 91 ?
2019-08-31 A 78 ?
2019-08-31 B 65 ?
2019-08-31 C 93 ?
2019-08-30 A 81 ?
2019-08-30 B 69 ?
2019-08-30 C 90 ?



というようなデータで、各プレイヤーのその日付段階での
直前1週間の平均scoreをweekAveのところに入れる方法をお願いします。
0053NAME IS NULL
垢版 |
2019/09/01(日) 16:47:32.11ID:???
sqliteで作ったので適当になおしてくれ

select tb1.col1,tb1.col2,max(tb1.col3),avg(tb2.col3)
from tb1
left outer join tb1 as tb2
on tb2.col2=tb1.col2
and date(tb2.col1)>=date(tb1.col1, '-7 days')
and date(tb2.col1)<=date(tb1.col1)
group by tb1.col1,tb1.col2
;
005452
垢版 |
2019/09/01(日) 17:52:32.35ID:???
>>53
大変ありがとうございました。
使わせていただきます。
0055NAME IS NULL
垢版 |
2019/09/20(金) 14:25:08.89ID:???
name, datetime, comment のテーブルでnameとdatetime で主キーとしています。
nameが重複しているものだけをリストアップするにはどうすればよいでしょうか。

A 2019/9/20 0:0 AAA1
B 2019/9/20 0:5 BBB1
C 2019/9/20 0:5 CCC1
A 2019/9/20 1:0 AAA2
C 2019/9/20 1:5 CCC2
A 2019/9/20 2:0 AAA3

の場合以下を期待します。

A 2019/9/20 0:0 AAA1
A 2019/9/20 1:0 AAA2
A 2019/9/20 2:0 AAA3
C 2019/9/20 0:5 CCC1
C 2019/9/20 1:5 CCC2

以下のSQL文で実現できますが、もっとスマートな方法はないでしょうか?

select * from xxx
where name in
(
select name from
(select name, count(*) as cnt from xxx group by name)
where cnt > 1
)
order by name, datetime
0056NAME IS NULL
垢版 |
2019/09/20(金) 16:17:33.29ID:???
HAVING使うぐらいか?

SELECT * FROM xxx WHERE name IN
(
SELECT name FROM xxx GROUP BY name HAVING 1<COUNT(*)
)
ORDER BY name, datetime
0057NAME IS NULL
垢版 |
2019/09/20(金) 16:43:23.46ID:???
>>56
出来ました!
group by はhaving でしたね。
ありがとうございました。
0058NAME IS NULL
垢版 |
2019/09/20(金) 18:25:52.08ID:???
こんなんでいいだろ

select *
from xxx T1
where exists (
  select *
  from xxx T2
  where T1.name = T2.name
  and T1.datetime <> T2.datetime
)
0059NAME IS NULL
垢版 |
2019/09/21(土) 16:28:13.26ID:???
これはありえないw
0060NAME IS NULL
垢版 |
2019/09/21(土) 17:16:57.39ID:???
テーブルのレコード数が多くてnameのカーディナリティも十分高いなら
一般には>>56より>>58の方が良いだろ。
0061NAME IS NULL
垢版 |
2019/09/21(土) 19:24:27.30ID:8nH6piRt
DBMSとデータ量で実測してみないとわからんな。
NoSQL系なら58の方が速そう
RDBなら56を改変して
SELECT L.*
FROM xxx L
JOIN (SELECT name FROM xxx GROUP BY name HAVING 1<COUNT(*)) R
ORDER BY L,name, L,datetime
の方が速いかも
0062NAME IS NULL
垢版 |
2019/09/21(土) 20:59:51.16ID:???
日時が同じデータはありえないという条件をいわれてないなら
普通はこんなsqlはかけないわw
0063NAME IS NULL
垢版 |
2019/09/21(土) 21:17:13.99ID:???
> nameとdatetime で主キーとしています。
0064NAME IS NULL
垢版 |
2019/09/21(土) 21:52:58.94ID:???
>>61
環境によるから実際に実行計画をみてみなきゃ確実なことは言えないのはその通りだけど、
そのsqlはサブクエリでfull scan 1回、外側で1回、nameのカーディナリティが高ければ
中間データも大きくなり、しかもJOINにインデックスが使われないときているから、
メモリに入りきらないようなテーブルの場合は極端に遅くなりそう。
0065NAME IS NULL
垢版 |
2019/09/21(土) 22:28:07.41ID:???
nameのカーディナリティが高い場合、>>56>>61では中間データが大きくなり
メモリに乗り切らないことが考えられ、>>58のほうが速い可能性がある。

nameのカーディナリティが低い場合、>>58ではexistsの条件に早くひっかかる
可能性が大きくなり、やはり>>58のほうが速い可能性がある。
0066NAME IS NULL
垢版 |
2019/09/21(土) 22:58:15.28ID:???
>>58は相関サブクエリにインデックスが使われ、datetimeの比較は2エントリ目で
必ず判断がつくから、実のところ速度はカーディナリティにあまり影響されない。
0067NAME IS NULL
垢版 |
2019/09/22(日) 04:36:57.50ID:???
PostgreSQL 9.6.11 にて1000000行のデータでEXPLAIN ANALYZEを付けて実行してみた。データは https://ideone.com/WTthGi のようにして作成。
各8回実行し、最初の4回は捨てた。

>>55 PostgreSQLでは副問合せに名前を付けないとエラーになるため AS a を追加
Execution time: 1202.286 ms / 1173.974 ms / 1194.647 ms / 1221.041 ms

>>56
Execution time: 1164.661 ms / 1171.337 ms / 1210.060 ms / 1179.993 ms

>>58 order by name, datetimeを追加
Execution time: 2350.302 ms / 2320.161 ms / 2345.047 ms / 2368.932 ms

>>61 R の後にON L.name=R.nameを追加、ORDER BYの,を.に変更
Execution time: 1248.337 ms / 1215.495 ms / 1222.694 ms / 1222.818 ms

↑はDBや環境、実際のデータ、インデックスの追加で変わると思う。
0068NAME IS NULL
垢版 |
2019/09/22(日) 11:03:21.51ID:oC+qLfZI
>>67
素晴らしい。結局最初のであまり問題ないね
最近はよっぽど遅い場合を除いて
意図が分かるように書くのがいい感じよね
0069NAME IS NULL
垢版 |
2019/10/01(火) 22:47:53.79ID:yfemt3Lz
すいません
教えてください…
カラムは2つです(アクセスログです)
IP
CGI

複数種類あるCGIに対してどのCGIに
このIPからは何回、このIPからは何回アクセスされたというのを集計したいのですが
SQLが思いつきません…
だれか教えてください…
0070NAME IS NULL
垢版 |
2019/10/01(火) 23:20:09.22ID:???
>>69
一旦各CGIがLogに出力して
日替わりや週替わり月替わりで集計したらどうか
0071NAME IS NULL
垢版 |
2019/10/02(水) 09:28:22.87ID:???
>>69  select CGI,IP,count(*) from テーブル group by CGI,IP;
0072NAME IS NULL
垢版 |
2019/10/07(月) 18:48:19.40ID:???
Windowsでデータベースを使いたく、今xamppをインストールして、PHPから学んでる最中なのですが、
mySQL(実際はMariaDB)で作ろうと考えていたのですが、私の目的のデータベースが作れるのか、調べてもなかなか出てこなくて、
ひょっとすると、リレーショナルデータベースでは出来ないのでは?と薄く疑問に思ってるのですが、、以下のデータベースを作ることは可能でしょうか?

例えば、プロゴルフ選手権のデーターベースを作るとします

選手の個人的な情報が入ったテーブル
(名前、生年月日、プロ登録年月日、所属チーム、性別等)

ゴルフコースの情報が入ったテーブル
(コース所在地、ホール数、ホールごとの距離、パー数、運営会社、プレイフィー、年次ごとの改修履歴等)

長年に渡るゴルフツアーの大会日程のテーブル
(カレンダー、使われたコース、個人成績、各順位の賞金額、賞金総額、スポンサー等)

このようなデータを連携させて、
ゴルフツアーのテーブルの個人成績の項目に個人データのテーブルとリレーションシップを張り、
ゴルフツアーのテーブルの開催コースの項目にコースのテーブルとリレーションシップを張り、

このデータベースを使って、例えば、
◯◯選手の年次ごとのツアー成績
◯◯選手の獲得賞金学の推移
◯◯選手のコース全長に対する成績傾向
特定のコースを得意とする選手
チームとして得意なコースか苦手なコースか

などの分析用のデータとして取り出したりすることは出来るものでしょうか?

accessをちょっと齧った程度の感覚ではできそうな気がするのですが
0074NAME IS NULL
垢版 |
2019/10/07(月) 22:08:37.13ID:nrBGAukj
>>72
そういうことをするためにリレーショナルデータベースは存在します。
0075NAME IS NULL
垢版 |
2019/10/08(火) 00:01:01.76ID:???
>>73>>74
ありがとうございます
安心して勉強続けます
0076NAME IS NULL
垢版 |
2019/10/08(火) 00:10:43.96ID:???
得意とか苦手とか、心の内面的な部分はどうSQLにしたら良いだろうね
0077NAME IS NULL
垢版 |
2019/10/08(火) 08:53:23.09ID:???
その人の平均スコアより何%以上良ければそのコースは得意とか、そんなんじゃね?
0078NAME IS NULL
垢版 |
2019/10/08(火) 20:09:49.20ID:???
数字のことはよく知らないけど、そういうのは平均値より偏差値が良いんじゃないの?
0079NAME IS NULL
垢版 |
2019/10/08(火) 21:08:15.53ID:1lB5cEuR
なぜ仕様の話になるのか?
0080NAME IS NULL
垢版 |
2019/10/13(日) 17:00:31.98ID:???
宿泊人数を日毎に集計したい。
テーブル構成は、
ID(主キー)、チェックイン日、チェックアウト日、人数
(id, startdate, enddate, guests)

以下のデータがあるとき、
1, 2019/10/1, 2019/10/7, 4
2. 2019/10/2, 2019/10/3, 1
3, 2019/10/10, 2019/10/20, 2

2019/10/1:4人
2019/10/2:5人
2019/10/3:4人
2019/10/7:0人
2019/10/10:2人
2019/10/20:0人

このように、変化がある時点のみを抽出したいのですが、
どのようなSQLが考えられますか?
0081NAME IS NULL
垢版 |
2019/10/13(日) 18:53:50.12ID:???
>>80
SQL-Server
select dates.date1 as date1, sum(coalesce(table1.guests, 0)) as guests
from table1
right join (
select startdate as date1 from table1
union
select enddate as date1 from table1
) dates on table1.startdate <= dates.date1 and dates.date1 < table1.enddate
group by dates.date1
order by dates.date1
0083NAME IS NULL
垢版 |
2019/10/27(日) 15:00:48.42ID:???
以下のURLのSQL練習サイトで勉強しているのですが
調べてもわからなかった問題があるので押してください。

■意味がわからなかった問題
https://sqlzoo.net/wiki/SELECT_within_SELECT_Tutorial/ja
の7番目、各大陸で最大

■問題の正解を出すSQL文

SELECT continent, name, area FROM world x
WHERE area >= ALL
(SELECT area FROM world y
WHERE y.continent=x.continent
AND area>0)

■教えていただきたい点

@SQLの解釈順序

 どのように上のSQLが解釈されているのか順を教えてください。
 
 こういう風に教えてくださいますと助かります。※以下の実行順は、私が考えたのですが、何かがおかしい感じがします・・・

  @()内のSQLを先に実行
  Aworld yテーブルの1行目のcontinentの値を見る。
  Bworld xテーブルの1行目のcontinentの値と見比べる。.continentの値が一致していたら、world yのarea の値を抽出する
  Cworld xテーブルのarea の値が、world yのareaより大きければ、world xのcontinent, name, areaを抽出する。
  Dworld yテーブルの2行目を見る・・・(以下行数を進めて繰り返し)


AほかのSQL文

 上の自己相関サブクエリと、以下のSQLで何か違いがあれば教えてください。
 (例えば、以下のSQLの場合、件数が数万件に及ぶと実行速度が極端に遅くなる等)
 select continent,name,area from world where area in (select max(area) from world group by continent)  



よろしくお願いいたします。

 
0084NAME IS NULL
垢版 |
2019/10/28(月) 00:43:36.69ID:6SIOZDZ3
>>83
解釈としてはxとyの突き合わせだが
DBMSによってどう最適化するかは異なるから
実際は実行計画を見てみるしかない。
そのサイトの裏側が何だかわからないので手元で実行計画を見てみるといい
https://www.atmarkit.co.jp/ait/articles/0408/25/news101.html
0085NAME IS NULL
垢版 |
2019/10/31(木) 02:56:13.58ID:taiLajBl
>>83
簡潔に指摘するとALL句の意味を取り違えています。

ALL句の副問い合わせは同じ大陸内の国ごとの面積を返します。

area >= ALL は (area >= 面積1 AND area >= 面積2 AND area >= 面積3) のようなものです。つまりこの場合は一番大きい面積とarea列値を比べることになります。

あなたが考えた処理方法では、@はともかくA〜Dを行っていまうと、最大の国だけでなく、同じ大陸の他のレコードまで取得してしまいます。
0086NAME IS NULL
垢版 |
2019/11/09(土) 06:00:59.81ID:???
table1 親品番,子品番
table2 品番,品名

取り出したい内容
親品番,親品名,子品番,子品名

table1,2のjoinでON句に親品番=品番や子品番=品番とすると片方ずつは取得できますが、両方同時に取得することはできますか?
0087NAME IS NULL
垢版 |
2019/11/09(土) 08:41:59.09ID:???
table1ひとつにtabl2をふたつJOINしてやればいいんだよ
0088NAME IS NULL
垢版 |
2019/11/09(土) 10:19:33.50ID:???
>>87
ありがとうございます
週明けに試してみます
0089NAME IS NULL
垢版 |
2019/11/09(土) 11:12:26.19ID:af/bSZEC
いかにも初心者らしい質問ですね
0090NAME IS NULL
垢版 |
2019/12/24(火) 16:02:18.63ID:???
SQL Server 2014です。

文字列検索で、半角濁音および半角半濁音を含むかどうか調べたいです。
ただ普通に LIKE '%゙%' と検索すると全件ヒットしてしまいます。
照合順序で区別をしてもダメでした。

どうすればいいのでしょうか?(´・ω・`)
0091NAME IS NULL
垢版 |
2019/12/24(火) 20:19:09.24ID:joe7BHe1
>>90
おそらく半角の濁点、半濁点が無視さらているのでしょう。

まずは自分が見ている濁点、半濁点の文字コードを調べてください。
0092NAME IS NULL
垢版 |
2019/12/24(火) 20:55:24.36ID:???
照合順序なにでやってだめだったんだよ
バイナリ系のやつならいける気がするけど
0093NAME IS NULL
垢版 |
2019/12/24(火) 21:29:38.72ID:joe7BHe1
キャラクタセットも自分で調べないようでは話にならない。
0094NAME IS NULL
垢版 |
2019/12/24(火) 21:31:04.18ID:joe7BHe1
条件が半角カタカナ文字だったらどうなるのか書いてくれよ。

エスパーじゃないからわかんねえよ!
0095NAME IS NULL
垢版 |
2019/12/24(火) 22:30:40.39ID:???
many to manyって中間テーブルつかわなあらわせないの?
0096NAME IS NULL
垢版 |
2019/12/24(火) 22:37:11.00ID:???
べつに中間じゃなくてもいいよ。
0098NAME IS NULL
垢版 |
2019/12/25(水) 08:01:52.36ID:???
create table T (
a,
b,
unique(a, b)
)

これがaとbのmany to many
0099NAME IS NULL
垢版 |
2019/12/25(水) 09:58:53.56ID:???
>>92
ありがとうございます。
照合順序で、てっきりCS・AS・KS・WSしか頭に入ってませんでした。
BINで判別できました。
0100NAME IS NULL
垢版 |
2019/12/25(水) 10:09:08.06ID:H+1gr7tn
マイク製品は大文字、小文字、全角、半角文字を同じのみなすからなあ。

変な仕様だけど、SQL Serverの照合順序を変えることが、SQLの質問なのか?
0103NAME IS NULL
垢版 |
2019/12/25(水) 22:35:06.89ID:H+1gr7tn
>>102
複合列の一意制約の構文だろうけど、どのRDBMSかは俺もわからない。
0104NAME IS NULL
垢版 |
2019/12/25(水) 22:48:21.03ID:???
どのって、ふつうに標準SQLでしょ。
0105NAME IS NULL
垢版 |
2019/12/26(木) 04:09:32.90ID:???
>>98は、見方によってはaとbの中間テーブルだがな
0106NAME IS NULL
垢版 |
2019/12/26(木) 09:54:56.49ID:???
aとbの中間ってなんだそれ
0107NAME IS NULL
垢版 |
2019/12/26(木) 15:59:01.34ID:z/i15tE2
>>106
服のうえから触るんじゃないの?
0108NAME IS NULL
垢版 |
2019/12/26(木) 20:15:51.39ID:???
触るか触られないぎりぎりが良いの
0109NAME IS NULL
垢版 |
2019/12/31(火) 18:20:49.42ID:???
ものすごく初歩的な質問すいません。

会社の業務で、OracleのデータベースからVBAを使って、データを取得しているようなのですが、この逆って出来るのでしょうか?
大量のExcelデータをVBAを使って、データベースを一気に書き換える、ようなスキルを身に付けたいと思っています。

また、このようなスキルを身に付けるにあたって、分かりやすい参考書のような書籍などありますでしょうか?
0111NAME IS NULL
垢版 |
2019/12/31(火) 19:08:31.03ID:???
一気に書き換えるってことは
DeleteしてInsertかな?
ODBC接続してSQL発行すれば良いのでは
0112NAME IS NULL
垢版 |
2019/12/31(火) 19:30:30.84ID:0OK2Hg3S
>>109
古いExcel VBAの逆引き本に書かれている。ただ、正解はないのでどれが最適なのかは深く考えないこと。
0113NAME IS NULL
垢版 |
2019/12/31(火) 21:08:53.58ID:???
>>110->>112
レスありがとうございます。

権限というのは、データベースに接続するためのID/PASSでしょうか?
Oracleのデータベースからデータを引っ張ってくるVBAの記述を見ると、「ID」「PASS」の
文字列があるので、これを利用できそうです。それともデータベースというのは
ID/PASSを知っているだけでは足りず、責任者の承認のようなものが一般的に必要と
なるのでしょうか?

「ODBC接続」「SQL発行」というのが、今目指していることのキーワードとなるようですね。
古い本に載っているそうですが、最新のものはありませんか?
それともネットのプログラミング講座を受講するのが早いでしょうか?

質問ばかりですいません。
よろしくお願いします。
0114NAME IS NULL
垢版 |
2019/12/31(火) 21:23:28.95ID:???
>>113
そのID/PASSがテーブルを更新する権限があるかどうかが問題
てか、マジでそのデータベース管理してる人にそんなことして良いのか確認しなよ
ヘタこいてデータぶっ壊しましたテヘペロ
で済むならいいけど
0115NAME IS NULL
垢版 |
2019/12/31(火) 22:34:09.63ID:???
普通DBの参照権限は貰えても更新権限は与えないよね。
0116NAME IS NULL
垢版 |
2019/12/31(火) 22:46:40.05ID:???
そうだね
Excelで扱うデータを引っ張るような業務レベルだと
テーブル更新権限までは持たせないと思う
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況