Tôi có hai bảng.
Bảng một:
ID COLOR
1 white
2 red
3 black
4 blue
5 yellow
Bảng hai:
ID COLOR
1 white
2 white
3 red
4 black
Đầu ra phải là:
1 white
2 red
3 black
[Loại trừ 2 giá trị không tồn tại trong bảng thứ hai - màu xanh và màu vàng + loại trừ màu trắng thứ hai].
Tôi đã thử các truy vấn tham gia và tồn tại khác nhau, không có may mắn. Cảm ơn.
pala_
8.7731 Huy hiệu vàng14 Huy hiệu bạc32 Huy hiệu đồng1 gold badge14 silver badges32 bronze badges
Đã hỏi ngày 11 tháng 5 năm 2015 lúc 0:37May 11, 2015 at 0:37
5
ID COLOR
1 white
2 white
3 red
4 black
0 là phù hợp cho điều này.select *
from t1
where exists
[select 1
from t2 where color = t1.color];
Bản demo ở đây
Trình điều khiển con là một trình điều khiển con tương quan [vì nó đề cập đến một giá trị từ truy vấn khác], và do đó nó được thực hiện cho mỗi hàng truy vấn bên ngoài. Vì vậy, tất cả các truy vấn bên trong cần phải làm, là kiểm tra và xem liệu màu từ truy vấn bên ngoài [và bảng thứ nhất] có mặt trong bảng thứ hai không.
Đã trả lời ngày 11 tháng 5 năm 2015 lúc 0:44May 11, 2015 at 0:44
pala_pala_pala_
8.7731 Huy hiệu vàng14 Huy hiệu bạc32 Huy hiệu đồng1 gold badge14 silver badges32 bronze badges
5
SELECT DISTINCT t1.* FROM t1
INNER JOIN t2 ON t1.color = t2.color;
Đã hỏi ngày 11 tháng 5 năm 2015 lúc 0:37
ID COLOR
1 white
2 white
3 red
4 black
0 là phù hợp cho điều này.May 11, 2015 at 0:49
Bản demo ở đâyDevon
Trình điều khiển con là một trình điều khiển con tương quan [vì nó đề cập đến một giá trị từ truy vấn khác], và do đó nó được thực hiện cho mỗi hàng truy vấn bên ngoài. Vì vậy, tất cả các truy vấn bên trong cần phải làm, là kiểm tra và xem liệu màu từ truy vấn bên ngoài [và bảng thứ nhất] có mặt trong bảng thứ hai không.9 gold badges64 silver badges92 bronze badges
5
13.2.11.6 & NBSP; Các nhóm phụ có tồn tại hoặc không tồn tại
Nếu một truy vấn con trả về bất kỳ hàng nào,
ID COLOR
1 white
2 white
3 red
4 black
1 là ID COLOR
1 white
2 white
3 red
4 black
2 và ID COLOR
1 white
2 white
3 red
4 black
3 là ID COLOR
1 white
2 white
3 red
4 black
4. Ví dụ:SELECT column1 FROM t1 WHERE EXISTS [SELECT * FROM t2];
Theo truyền thống, một truy vấn con
ID COLOR
1 white
2 white
3 red
4 black
5 bắt đầu với ID COLOR
1 white
2 white
3 red
4 black
6, nhưng nó có thể bắt đầu bằng ID COLOR
1 white
2 white
3 red
4 black
7 hoặc ID COLOR
1 white
2 white
3 red
4 black
8 hoặc bất cứ điều gì. MySQL bỏ qua danh sách ID COLOR
1 white
2 white
3 red
4 black
9 trong một truy vấn con như vậy, vì vậy nó không có gì khác biệt.Đối với ví dụ trước, nếu
1 white
2 red
3 black
0 chứa bất kỳ hàng nào, thậm chí các hàng không có gì ngoài các giá trị 1 white
2 red
3 black
1, điều kiện ID COLOR
1 white
2 white
3 red
4 black
5 là ID COLOR
1 white
2 white
3 red
4 black
2. Đây thực sự là một ví dụ không thể xảy ra bởi vì một truy vấn con 1 white
2 red
3 black
4 hầu như luôn luôn chứa các mối tương quan. Dưới đây là một số ví dụ thực tế hơn:Những loại cửa hàng có mặt trong một hoặc nhiều thành phố?
SELECT DISTINCT store_type FROM stores WHERE EXISTS [SELECT * FROM cities_stores WHERE cities_stores.store_type = stores.store_type];
Loại cửa hàng nào có mặt ở No City?
SELECT DISTINCT store_type FROM stores WHERE NOT EXISTS [SELECT * FROM cities_stores WHERE cities_stores.store_type = stores.store_type];
Những loại cửa hàng có mặt ở tất cả các thành phố?
SELECT DISTINCT store_type FROM stores s1 WHERE NOT EXISTS [ SELECT * FROM cities WHERE NOT EXISTS [ SELECT * FROM cities_stores WHERE cities_stores.city = cities.city AND cities_stores.store_type = stores.store_type]];
Ví dụ cuối cùng là truy vấn
1 white
2 red
3 black
5 được lồng đôi. Đó là, nó có một mệnh đề 1 white
2 red
3 black
5 trong mệnh đề 1 white
2 red
3 black
7. Chính thức, nó trả lời câu hỏi mà một thành phố có tồn tại với một cửa hàng không có trong 1 white
2 red
3 black
8 không? Nhưng sẽ dễ dàng hơn để nói rằng một 1 white
2 red
3 black
7 được lồng vào câu hỏi là select *
from t1
where exists
[select 1
from t2 where color = t1.color];
0 ID COLOR
1 white
2 white
3 red
4 black
2 cho tất cả select *
from t1
where exists
[select 1
from t2 where color = t1.color];
2?“does a city exist with a store that is not in 1 white
2 red
3 black
8”? But it is easier to say that a nested 1 white
2 red
3 black
7 answers the
question “is select *
from t1
where exists
[select 1
from t2 where color = t1.color];
0 ID COLOR
1 white
2 white
3 red
4 black
2 for all select *
from t1
where exists
[select 1
from t2 where color = t1.color];
2?”Trong MySQL 8.0.19 và sau đó, bạn cũng có thể sử dụng
1 white
2 red
3 black
5 hoặc 1 white
2 red
3 black
7 với select *
from t1
where exists
[select 1
from t2 where color = t1.color];
5 trong truy vấn con, như thế này:SELECT column1 FROM t1 WHERE EXISTS [TABLE t2];
Các kết quả giống như khi sử dụng
select *
from t1
where exists
[select 1
from t2 where color = t1.color];
6 mà không có mệnh đề select *
from t1
where exists
[select 1
from t2 where color = t1.color];
7 trong truy vấn con.