Tôi gặp vấn đề với chế độ xem tôi muốn tạo. Tôi có hai bảng được nối trong một kết nối bên ngoài bên trái, giả sử tableA
và tableB
, trong đó tableB
được nối với nhau bên ngoài.mệnh đề SQL cho phép nối ngoài bên trái
Tôi muốn chỉ chọn những hàng từ bảng B trong đó trạng thái bằng 4, vì vậy tôi thêm WHERE state = 4
vào truy vấn của mình. Bây giờ tập kết quả được cắt khá một chút vì tất cả các hàng không có hàng phù hợp trong tableB
đều bị xóa khỏi kết quả (vì trạng thái không phải là 4 cho các hàng đó). Tôi cũng đã thử WHERE state = 4 OR state IS NULL
, không hoạt động (hoặc từ state
về mặt kỹ thuật không phải là NULL
khi không có trạng thái).
Vì vậy, những gì tôi cần là tuyên bố WHERE
chỉ được đánh giá khi có thực sự là một hàng, có tồn tại một thứ như vậy không?
Nếu tôi không thấy hai tùy chọn: join (SELECT * FROM tableB WHERE state = 4)
thay vì bảng B hoặc tạo chế độ xem có cùng tuyên bố WHERE
và tham gia thay vào đó. Hiệu suất tùy chọn tốt nhất là gì?
Đây là SQL Server 2008 R2 bằng cách này.
sẽ rất thú vị để cố gắng tìm ra lý do tại sao 'Ở ĐÂU state = 4 OR bang lÀ NULL' không hoạt động, vì nó sẽ ngăn chặn trái join được chuyển đổi thành một bên trong tham gia. –
@Damien_The_Unbeliever - Nó sẽ cung cấp cho bạn tất cả các hàng từ TableA chứ không phải trong TableB nhưng không phải là các hàng mà TableA có một kết quả phù hợp trong TableB, trong đó trạng thái <> 4. http://data.stackexchange.com/stackoverflow/qt/110316/ –
@ Damien_The_Unbeliever: có 3 trạng thái: phù hợp với trạng thái = 4, phù hợp với trạng thái <> 4, không khớp – gbn