回答編集履歴
3
説明追記
test
CHANGED
@@ -11,4 +11,30 @@
|
|
11
11
|
|
12
12
|
二つ目のSQLは、サブクエリ内に、nameフィールドはあります。この場合、近いnameフィールドを参照しますので、サブクエリ内のpeopleテーブルのnameフィールドを参照します。つまり、サブクエリに対する条件ということになります。親クエリには影響を与えません。よって、希望の結果が得らることになります。
|
13
13
|
|
14
|
+
---
|
14
15
|
|
16
|
+
2つ目のSQLは、メインとサブのpeopleテーブルに別名をつけて記述すると下記になります。
|
17
|
+
```sql
|
18
|
+
SELECT movies.id, title FROM movies
|
19
|
+
JOIN stars ON movies.id = stars.movie_id
|
20
|
+
JOIN people a ON stars.person_id = a.id
|
21
|
+
WHERE a.name = "Johnny Depp"
|
22
|
+
AND movies.id IN
|
23
|
+
(SELECT movies.id FROM movies
|
24
|
+
JOIN stars ON movies.id = stars.movie_id
|
25
|
+
JOIN people b ON stars.person_id = b.id
|
26
|
+
WHERE b.name = "Helena Bonham Carter");
|
27
|
+
```
|
28
|
+
これは希望の結果が得られます。
|
29
|
+
このサブクエリの条件を下記のように親クエリのフィールドを参照するように書き換えると、結果は0件になります。
|
30
|
+
```sql
|
31
|
+
SELECT movies.id, title FROM movies
|
32
|
+
JOIN stars ON movies.id = stars.movie_id
|
33
|
+
JOIN people a ON stars.person_id = a.id
|
34
|
+
WHERE a.name = "Johnny Depp"
|
35
|
+
AND movies.id IN
|
36
|
+
(SELECT movies.id FROM movies
|
37
|
+
JOIN stars ON movies.id = stars.movie_id
|
38
|
+
JOIN people b ON stars.person_id = b.id
|
39
|
+
WHERE a.name = "Helena Bonham Carter");
|
40
|
+
```
|
2
説明追記
test
CHANGED
@@ -9,6 +9,6 @@
|
|
9
9
|
つまり、親クエリに ` people.name = "Johnny Depp" and people.name = "Helena Bonham Carter"`という条件を設定したのと同意になります。
|
10
10
|
このような条件に合致するレコードはないので、当然1件を抽出されないことになります。
|
11
11
|
|
12
|
+
二つ目のSQLは、サブクエリ内に、nameフィールドはあります。この場合、近いnameフィールドを参照しますので、サブクエリ内のpeopleテーブルのnameフィールドを参照します。つまり、サブクエリに対する条件ということになります。親クエリには影響を与えません。よって、希望の結果が得らることになります。
|
12
13
|
|
13
14
|
|
14
|
-
|
1
説明修正
test
CHANGED
@@ -1,6 +1,14 @@
|
|
1
|
-
最初のSQLのサブクエリ内の下記のSQLは、name は people.name ということになりますが、movies のフィールド以外を対象にしたら抽出条件として意味をなさないので、結果は0件になります。
|
1
|
+
最初のSQLのサブクエリ内の下記のSQLは、name は people.name ということになります ~~が、movies のフィールド以外を対象にしたら抽出条件として意味をなさないので、結果は0件になります。~~
|
2
2
|
|
3
3
|
```sql
|
4
4
|
SELECT movies.id FROM movies
|
5
|
-
WHERE name = "Helena"
|
5
|
+
WHERE name = "Helena Bonham Carter"
|
6
6
|
```
|
7
|
+
|
8
|
+
よって、`people.name = "Helena Bonham Carter"` という条件式になりますので、親クエリのフィールドに対する条件になります。
|
9
|
+
つまり、親クエリに ` people.name = "Johnny Depp" and people.name = "Helena Bonham Carter"`という条件を設定したのと同意になります。
|
10
|
+
このような条件に合致するレコードはないので、当然1件を抽出されないことになります。
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
|