2009-10-15 33 views
12

Tôi cần hợp nhất hai kết quả truy vấn như trong công đoàn, nhưng tôi muốn chỉ giữ sự khác biệt giữa hai kết quả. Điều này có thể không?MySQL - Có thể nhận được 'sự khác biệt' của hai kết quả truy vấn không?

Tôi về cơ bản chọn TẤT CẢ các tài nguyên trong Truy vấn 1 và KHÔNG ĐƯỢC PHÉP TÀI LIỆU trong Truy vấn 2, tôi rõ ràng là cần nguồn lực ĐƯỢC PHÉP trong kết quả cuối cùng của tôi.

Trong pseodo-code:

Query1 - Query2 

Queryresult 1:

+-------+ 
| id | 
+-------+ 
| 1 | 
+-------+ 
| 2 | 
+-------+ 
| 3 | 
+-------+ 
| 4 | 
+-------+ 
| 5 | 
+-------+ 
| 6 | 
+-------+ 

Queryresult 2:

+-------+ 
| id | 
+-------+ 
| 2 | 
+-------+ 
| 5 | 
+-------+ 

cần thiết:

+-------+ 
| id | 
+-------+ 
| 1 | 
+-------+ 
| 3 | 
+-------+ 
| 4 | 
+-------+ 
| 6 | 
+-------+ 
+0

Yêu cầu không rõ ràng. Giải thích văn bản đề cập đến TẤT CẢ truy vấn1 nhưng sau đó ví dụ mâu thuẫn với điều này. Hãy cố gắng xác định yêu cầu chỉ thông qua ví dụ. Nếu truy vấn 2 có 7 hoặc 0 thì các giá trị này có được bao gồm trong sự khác biệt không? – mjv

+1

Tôi đồng ý rằng tiêu đề không phù hợp với nội dung câu hỏi, nhưng câu hỏi chính nó là khá rõ ràng. OP yêu cầu trừ: tất cả các tài nguyên không "không khả dụng": 'A - B' – nickf

+0

Trong một phút, tôi nghĩ anh ta đang yêu cầu trừ giá trị trường truy vấn 1 để truy vấn 2 giá trị trường. – putolaruan

Trả lời

40

Như thế này, sử dụng NOT IN:

SELECT id FROM queryOneTable 
WHERE id NOT IN (
    SELECT id FROM queryTwoTable 
) 
+1

dễ dàng như vậy, nhưng vẫn hoạt động :) – Ropstah

4

Tôi đã thử nghiệm truy vấn này trong SQLExpress, vì tôi không có MySql. Tôi giả sử nó hoạt động theo cùng một cách.

select x.id 
from x 
left join y on x.id = y.id 
where y.id is null 
+0

nó phải là 'select x.id' –

1

Các trái tham gia cách tiếp cận linh hoạt hơn vì bạn có thể sử dụng nó trên hai bảng (hoặc bất kỳ hai bộ kết quả truy vấn), nơi sự độc đáo không bao gồm một id nhưng một kết hợp của nhiều giá trị cột. Ngoài ra nó được coi là tốt hơn SQL (hoặc ít nhất là nó được sử dụng để được) để làm chủ bên ngoài tham gia (s.a. trái) vì nó là performant hơn so với viết lựa chọn lồng nhau.

Các vấn đề liên quan