2013-08-22 28 views

Trả lời

15

Bạn đang tốt hơn nhiều bằng cách sử dụng cú pháp ANSI

SELECT * 
    FROM a 
     LEFT OUTER JOIN b ON(a.id = b.id and 
          b.val = 'test') 

Bạn có thể làm điều tương tự sử dụng cú pháp của Oracle cũng nhưng nó được một chút hinkey

SELECT * 
    FROM a, 
     b 
WHERE a.id = b.id(+) 
    AND b.val(+) = 'test' 

Lưu ý rằng trong cả hai trường hợp, tôi bỏ qua bảng c vì bạn không chỉ định điều kiện tham gia. Và tôi giả định rằng bạn không thực sự muốn tham gia A đến B và sau đó tạo ra một sản phẩm Descartes với C.

+0

Đây có phải là chính xác: CHỌN * TỪ a, b Ở ĐÂU a.id = b.id (+) VÀ b.val (+) = 'test' và b.col2 (+) = 'test2'; Tôi muốn lấy tất cả các hàng từ một hàng tương ứng trong b là null hoặc hàng tương ứng trong b có col2 = 'test2' và val = 'test' Vì vậy, nó hoặc là null OR (col2 = 'test2' AND val = 'test') – Victor

1

Di chuyển điều kiện sang mệnh đề JOIN và sử dụng mẫu tham gia chuẩn ANSI.

SELECT NameYourFields,... 
FROM A 
LEFT OUTER JOIN B 
ON A.ID = B.ID 
AND B.VAL = 'test' 
INNER JOIN C 
ON ... 
0

LEFT OUTER JOIN là một trong các phép toán JOIN cho phép bạn chỉ định một mệnh đề nối. Nó bảo quản các hàng chưa từng có từ bảng đầu tiên (trái), nối chúng với một hàng NULL trong hình dạng của bảng thứ hai (bên phải).

Vì vậy, bạn có thể làm như sau:

CHỌN
TỪ một LEFT OUTER JOIN b ON a.id = b.id

--Note mà bạn đã sử dụng dấu nháy kép "test" mà không được sử dụng cho varchar trong SQL, bạn nên sử dụng dấu nháy đơn 'test'

AND b.val = 'test';

1
SELECT * FROM abc a, xyz b 
WHERE a.id = b.id 
    AND b.val = 'test' 
+0

Xin chào và chào mừng bạn đến với SO. Cảm ơn sự đóng góp của bạn nhưng nó sẽ cực kỳ hữu ích nếu bạn có thể mở rộng câu trả lời của bạn với một vài chi tiết về cách nó trả lời câu hỏi của nạn nhân. – Deepend

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