質問編集履歴

2

一部データ修正

2022/12/04 12:51

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- Mysql 条件によって接続するテーブルを分岐したい(初心者)
1
+ Mysql 条件によって接続するテーブルを分岐したい
test CHANGED
@@ -43,7 +43,7 @@
43
43
  元テーブルのデータ
44
44
  ```ここに言語を入力
45
45
  INSERT INTO `元テーブル` (`連番id`, `データID`, `顧客ID`)
46
- VALUES (NULL, '501', '101'), (NULL, '502', '101'), (NULL, '601', '102'), (NULL, '601', '102'), (NULL, '701', '103'), (NULL, '702', '103');
46
+ VALUES (NULL, '501', '101'), (NULL, '502', '101'), (NULL, '601', '102'), (NULL, '602, '102'), (NULL, '701', '103'), (NULL, '702', '103');
47
47
 
48
48
  ```
49
49
 

1

追記をしました

2022/12/04 06:13

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -24,3 +24,78 @@
24
24
  CASE文で接続データを分岐するのだと思いますが
25
25
  ※の結果がなかった時に※※とする分岐方法がわかりませんでした。
26
26
 
27
+ 追記
28
+ 多くの方から質問の仕方に対するご指摘いただきましてありがとうございました。
29
+ 質問の内容があいまいだったと反省しております。
30
+ テーブル定義とサンプルデータ、出したいSELECT文のイメージを申し上げます。
31
+
32
+ 以下の三つのテーブルがある
33
+
34
+ 元テーブル
35
+ ```ここに言語を入力
36
+ CREATE TABLE 元テーブル(
37
+ 連番id INT(11) AUTO_INCREMENT NOT NULL,
38
+ データID VARCHAR(30) NOT NULL,
39
+ 顧客ID VARCHAR(30) NOT NULL,
40
+ PRIMARY KEY (連番id)
41
+ );
42
+ ```
43
+ 元テーブルのデータ
44
+ ```ここに言語を入力
45
+ INSERT INTO `元テーブル` (`連番id`, `データID`, `顧客ID`)
46
+ VALUES (NULL, '501', '101'), (NULL, '502', '101'), (NULL, '601', '102'), (NULL, '601', '102'), (NULL, '701', '103'), (NULL, '702', '103');
47
+
48
+ ```
49
+
50
+ テーブル1
51
+ ```ここに言語を入力
52
+ CREATE TABLE 接続1テーブル(
53
+ 連番id INT(11) AUTO_INCREMENT NOT NULL,
54
+ データID VARCHAR(30) NOT NULL,
55
+ 顧客ID VARCHAR(30) NOT NULL,
56
+ MEMO VARCHAR(30) NOT NULL,
57
+ PRIMARY KEY (連番id )
58
+ );
59
+ ```
60
+ テーブル1のデータ
61
+ ```ここに言語を入力
62
+ INSERT INTO `接続1テーブル` (`連番id`, `データID`, `顧客ID`, `MEMO`)
63
+ VALUES (NULL, '501', '101', '101顧客専用501'), (NULL, '601', '102', '102顧客専用601');
64
+ ```
65
+
66
+ テーブル2
67
+ ```ここに言語を入力
68
+ CREATE TABLE 接続2テーブル(
69
+ 連番id INT(11) AUTO_INCREMENT NOT NULL,
70
+ データID VARCHAR(30) NOT NULL,
71
+ MEMO VARCHAR(30) NOT NULL,
72
+ PRIMARY KEY (連番id )
73
+ );
74
+ ```
75
+ テーブル2のデータ
76
+ ```ここに言語を入力
77
+ INSERT INTO `接続2テーブル` (`連番id`, `データID`, `MEMO`)
78
+ VALUES (NULL, '501', 'メモ501'), (NULL, '502', 'メモ502'), (NULL, '601', 'メモ601'), (NULL, '602', 'メモ602'), (NULL, '701', 'メモ701'), (NULL, '702', 'メモ702');
79
+ ```
80
+
81
+
82
+ 求めたい結果
83
+ |顧客ID|データID|メモ|
84
+ |:101|:501|:101顧客専用501:|
85
+ |:101|:502|:メモ502:|
86
+ |:102|:601|:102顧客専用601:|
87
+ |:102|:602|:メモ602:|
88
+ |:103|:701|:メモ701:|
89
+ |:103|:702|:メモ702:|
90
+
91
+
92
+ 元テーブル.データIDをテーブル1.データID外部結合し、顧客ID、データID、メモの結果を出したいのですが
93
+ 顧客IDがテーブル1に存在しないときに結合先を元テーブル.データIDとテーブル2.データIDに変更したいのです。
94
+
95
+ dameo様のおっしゃる「3つの表を一気に外部結合した上で、接続1、接続2どちらか一方がNULLでないという条件で行を抽出、さらにSELECT句でCASEを使ってメモを優先順位どおりに出せばいいのかなと思います。」というのが解なのかな?といま検討中ですが、能力不足でまだそのヒントを生かせておりません。
96
+ もうしばらく考えるお時間を頂きたいと思います。
97
+
98
+ 皆様、お時間を割いていただいてありがとうございます。
99
+
100
+
101
+