teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

5

期待する結果の追加

2018/06/22 03:12

投稿

takagi.1994
takagi.1994

スコア47

title CHANGED
File without changes
body CHANGED
@@ -51,6 +51,7 @@
51
51
  (1, 'aaaa'),
52
52
  (2, 'bbbb'),
53
53
  (3, 'cccc');
54
+ (4, 'dddd');
54
55
 
55
56
  INSERT INTO `tableb` (`cd`, `id`, `data1`) VALUES
56
57
  (1, 1, 'hoge11'),
@@ -60,4 +61,35 @@
60
61
  (5, 2, 'hoge22'),
61
62
  (6, 2, 'hoge22'),
62
63
  (7, 3, 'hoge31');
63
- ```
64
+ ```
65
+
66
+ 期待する結果1
67
+ ```
68
+ id customerName cd id1 data1
69
+ 1 aaaa 3 1 hoge13
70
+ 1 aaaa 2 1 hoge12
71
+ 1 aaaa 1 1 hoge11
72
+ 2 bbbb 6 2 hoge23
73
+ 2 bbbb 5 2 hoge22
74
+ 2 bbbb 4 2 hoge21
75
+ 3 cccc 7 3 hoge31
76
+ 4 dddd null null null
77
+ ```
78
+
79
+ 期待する結果2
80
+ ```
81
+ id customerName cd id1 data1
82
+ 1 aaaa 3 1 hoge13
83
+ 2 bbbb 6 2 hoge23
84
+ 3 cccc 7 3 hoge31
85
+ 4 dddd null null null
86
+ ```
87
+
88
+ UI側で"最新のみ"のチェックボックスがあるのでそれにチェックがあるかないかによって
89
+ 期待する結果は1と2に分かれます。
90
+
91
+ また、プログラム側でwhere区をUI側で選択されたその他の条件で組み立てて行くつもりですが、
92
+ 今回はそこは問題になってはいません。
93
+
94
+ 最新flagがあるかないかで基本的なsql分は分けたくないなと思っています。
95
+ where区を組み立てるロジックをできればそれぞれに書きたくない。

4

文法の訂正

2018/06/22 03:12

投稿

takagi.1994
takagi.1994

スコア47

title CHANGED
File without changes
body CHANGED
@@ -14,7 +14,7 @@
14
14
  LEFT JOIN `tableB`
15
15
  ON `tableA`.`id` = `tableB`.id
16
16
  GROUP BY `tableA`.`id`
17
- ORDER BY `tableB`.`cd` DESC, `tableA`.`id` ASC
17
+ ORDER BY `tableA`.`id` ASC, `tableB`.`cd` DESC
18
18
  ```
19
19
 
20
20
  ```ここに言語を入力

3

説明の追記

2018/06/21 17:23

投稿

takagi.1994
takagi.1994

スコア47

title CHANGED
File without changes
body CHANGED
@@ -3,6 +3,11 @@
3
3
  `tableB`.`cd`の降順, `tableA`.`id`の昇順で取得したい。
4
4
  また、条件によって`tableB`.`cd`で降順した`tableB`最初の1件の場合と全件が必要です。
5
5
 
6
+ tableAはマスターでtableBにデータがあるデータが蓄積されcdの値が増えていきます。
7
+ よって、値が大きいものが最新となります。
8
+ 取得する際はtableaに対してソートをしてもその際のtableBのデータは最新順(つまり降順)とさせたい。
9
+ また、条件(最新の1件のみのflagがあるない)によってtableBから取得するデータを1件or全件としたい。
10
+
6
11
  ```ここに言語を入力
7
12
  SELECT *
8
13
  FROM `tableA`

2

参考データの追加

2018/06/21 16:39

投稿

takagi.1994
takagi.1994

スコア47

title CHANGED
File without changes
body CHANGED
@@ -26,4 +26,33 @@
26
26
  ```
27
27
  こんな感じで試してみたのですがうまくいきません。
28
28
 
29
- うまく行く方法はありますでしょうか?
29
+ うまく行く方法はありますでしょうか?
30
+
31
+ ```
32
+ CREATE TABLE `tablea` (
33
+ `id` int(11) NOT NULL AUTO_INCREMENT,
34
+ `customerName` varchar(60) NOT NULL,
35
+ PRIMARY KEY (`id`)
36
+ ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
37
+
38
+ CREATE TABLE `tableb` (
39
+ `cd` int(11) NOT NULL AUTO_INCREMENT,
40
+ `id` int(11) NOT NULL,
41
+ `data1` varchar(255) NOT NULL,
42
+ PRIMARY KEY (`cd`)
43
+ ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
44
+
45
+ INSERT INTO `tablea` (`id`, `customerName`) VALUES
46
+ (1, 'aaaa'),
47
+ (2, 'bbbb'),
48
+ (3, 'cccc');
49
+
50
+ INSERT INTO `tableb` (`cd`, `id`, `data1`) VALUES
51
+ (1, 1, 'hoge11'),
52
+ (2, 1, 'hoge12'),
53
+ (3, 1, 'hoge13'),
54
+ (4, 2, 'hoge21'),
55
+ (5, 2, 'hoge22'),
56
+ (6, 2, 'hoge22'),
57
+ (7, 3, 'hoge31');
58
+ ```

1

誤字

2018/06/21 16:26

投稿

takagi.1994
takagi.1994

スコア47

title CHANGED
File without changes
body CHANGED
@@ -9,7 +9,7 @@
9
9
  LEFT JOIN `tableB`
10
10
  ON `tableA`.`id` = `tableB`.id
11
11
  GROUP BY `tableA`.`id`
12
- ORDER BY `tableB`.`cd` DESC
12
+ ORDER BY `tableB`.`cd` DESC, `tableA`.`id` ASC
13
13
  ```
14
14
 
15
15
  ```ここに言語を入力
@@ -22,7 +22,7 @@
22
22
  ORDER BY `tableB`.`cd` DESC
23
23
  ) as `tableC`
24
24
  GROUP BY `tableC`.`id`
25
- ORDER BY `tableC`.`cd` DESC
25
+ ORDER BY `tableC`.`cd` ASC
26
26
  ```
27
27
  こんな感じで試してみたのですがうまくいきません。
28
28