回答編集履歴

3

追記

2019/06/08 06:54

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -35,3 +35,41 @@
35
35
  LEFT JOIN FOOD AS FOOD3 ON MENU.REQUIRED_FOOD3= FOOD3.FOOD_ID
36
36
 
37
37
  ```
38
+
39
+ --
40
+
41
+ 相関副問合せで行う。
42
+
43
+ FOOD_MENU の件数が少なければ(where条件で絞り込まれる場合も含む)こちらの方が高速。
44
+
45
+ ```SQL
46
+
47
+ SELECT MENU.*
48
+
49
+ , coalesce(
50
+
51
+ (select NAME from VEGETABLE_FOOD where FOOD_ID=MENU.REQUIRED_FOOD1)
52
+
53
+ ,(select NAME from MEAT_FOOD where FOOD_ID=MENU.REQUIRED_FOOD1)
54
+
55
+ ) FOOD1_NAME
56
+
57
+ , coalesce(
58
+
59
+ (select NAME from VEGETABLE_FOOD where FOOD_ID=MENU.REQUIRED_FOOD2)
60
+
61
+ ,(select NAME from MEAT_FOOD where FOOD_ID=MENU.REQUIRED_FOOD2)
62
+
63
+ ) FOOD2_NAME
64
+
65
+ , coalesce(
66
+
67
+ (select NAME from VEGETABLE_FOOD where FOOD_ID=MENU.REQUIRED_FOOD3)
68
+
69
+ ,(select NAME from MEAT_FOOD where FOOD_ID=MENU.REQUIRED_FOOD3)
70
+
71
+ ) FOOD3_NAME
72
+
73
+ FROM FOOD_MENU AS MENU
74
+
75
+ ```

2

訂正

2019/06/08 06:54

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  SELECT MENU.*, FOOD1.NAME, FOOD2.NAME, FOOD3.NAME
28
28
 
29
- FROM FOOD_MENU AS
29
+ FROM FOOD_MENU AS MENU
30
30
 
31
31
  LEFT JOIN FOOD AS FOOD1 ON MENU.REQUIRED_FOOD1= FOOD1.FOOD_ID
32
32
 

1

追記

2019/06/08 06:48

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -1,3 +1,15 @@
1
+ > SQLでJOINするテーブルをカラムの値によって変えたいです。
2
+
3
+
4
+
5
+ 動的にSQLを組み立てない限りできません。
6
+
7
+ SQLの基本は集合を作成する事です。ケースがあるなら先ず全ての場合を含んだ集合を作ること。
8
+
9
+
10
+
11
+ ---
12
+
1
13
  WITH式で纏めて、それを結合
2
14
 
3
15
  ```SQL