2011-11-03 36 views
7

tôi cần phải hỏi làm thế nào có thể sử dụng bí danh trong Select Query,Sử dụng bí danh trong Select Query

tôi cần điều này

SELECT (Complex SubQuery) AS A, (Another Sub Query WHERE ID = A) FROM TABLE 
+4

tôi nghi ngờ câu trả lời là để thay đổi phức tạp biểu hiện 'SubQuery' vô hướng của bạn thành một biểu bảng nhưng thật khó để gỡ lỗi mã mà chúng ta không thể nhìn thấy. – onedaywhen

+0

Tôi đồng ý với bạn. Tôi cần phải làm cho truy vấn này hiệu quả. – user960567

Trả lời

12

Bạn không thể làm điều này:

SELECT (Complex SubQuery) AS A, (Another Sub Query WHERE ID = A) FROM TABLE 

Bạn tuy nhiên có thể làm này:

SELECT (Another Sub Query WHERE ID = A.somecolumn) 
FROM table 
JOIN SELECT (Complex SubQuery) AS A on (A.X = TABLE.Y) 

Hoặc

SELECT (Another Sub Query) 
FROM table 
WHERE table.afield IN (SELECT Complex SubQuery.otherfield) 

Vấn đề là bạn không thể tham khảo các bí danh như thế này trong mệnh đề SELECT và WHERE, bởi vì chúng sẽ không được đánh giá theo thời gian phần được chọn hoặc phần được thực hiện.
Bạn cũng có thể sử dụng mệnh đề having, nhưng có điều khoản không sử dụng các chỉ mục và cần tránh nếu có thể.

+0

?? Có lẽ bạn có nghĩa là: "WHERE ID = A.SomeColumn' –

+0

Bạn (và OP) đang sử dụng' A' như một bí danh bảng và như một bí danh cột (ở những nơi khác nhau). –

+0

@ypercube, đã sửa nó ngay bây giờ. – Johan

2

Bạn có thể viết lại truy vấn của bạn như thế này

SELECT Complex.A, (Another Sub Query WHERE ID = Complex.A) 
FROM TABLE 
CROSS JOIN ((Complex SubQuery) AS A) Complex 
0

Một giải pháp mà bạn có thể sử dụng:

SELECT (Complex SubQuery) AS A, (Another Sub Query WHERE ID = A) 
FROM 
TABLE MAIN 
OUTER APPLY (SELECT (Complex SubQuery) AS A) 
Các vấn đề liên quan