2010-01-13 43 views
7

Tôi có nghi ngờ và câu hỏi về bí danh trong sql. Nếu tôi muốn sử dụng bí danh trong cùng một truy vấn, tôi có thể sử dụng nó không. Đối với ví dụ: Cân nhắc tên Bảng xyz với cột a và bSử dụng bí danh trong truy vấn và sử dụng bí danh đó

select (a/b) as temp , temp/5 from xyz 

Đây có phải là có thể bằng cách nào đó?

Trả lời

8

Bạn đang nói về việc cung cấp mã định danh cho một biểu thức trong truy vấn và sau đó sử dụng lại số nhận dạng đó trong các phần khác của truy vấn?

Điều đó là không thể trong Microsoft SQL Server mà gần như tất cả các kinh nghiệm SQL của tôi được giới hạn. Nhưng bạn có thể làm như sau.

SELECT temp, temp/5 
FROM (
    SELECT (a/b) AS temp 
    FROM xyz 
) AS T1 

Rõ ràng là ví dụ này không đặc biệt hữu ích, nhưng nếu bạn sử dụng biểu thức ở một vài nơi, nó có thể hữu ích hơn. Nó có thể có ích khi các biểu thức dài và bạn cũng muốn nhóm chúng lại vì mệnh đề GROUP BY yêu cầu bạn phải nói lại biểu thức.

Trong MSSQL bạn cũng có tùy chọn tạo cột được tính toán được chỉ định trong giản đồ bảng và không có trong truy vấn.

+0

+1. Điểm tốt. – Guru

-1

Bạn có thể tìm thấy W3Schools "SQL Alias" để được trợ giúp tốt.

Dưới đây là một ví dụ từ hướng dẫn của họ:

SELECT po.OrderID, p.LastName, p.FirstName 
FROM Persons AS p, 
Product_Orders AS po 
WHERE p.LastName='Hansen' AND p.FirstName='Ola' 

Về sử dụng Alias ​​hơn nữa trong truy vấn, tùy thuộc vào cơ sở dữ liệu bạn đang sử dụng nó có thể thực hiện được.

2

Không thể trong cùng một mệnh đề SELECT, giả sử sản phẩm SQL của bạn tuân thủ với cấp nhập cảnh Chuẩn SQL-92.

Biểu thức (và tên tương quan của chúng) trong mệnh đề SELECT xuất hiện 'cùng một lúc'; không có đánh giá từ trái sang phải mà bạn có vẻ hy vọng.

Theo câu trả lời của @Josh Einstein ở đây, bạn có thể sử dụng bảng dẫn xuất như một cách giải quyết (hy vọng sử dụng tên có ý nghĩa hơn là "temp" và cung cấp một biểu thức cho biểu thức temp/5 - ghi nhớ người sẽ kế thừa mã). Lưu ý rằng mã bạn đã đăng sẽ hoạt động trên Cơ sở dữ liệu MS Access (và sẽ gán một tên tương quan vô nghĩa như Expr1 vào biểu thức thứ hai của bạn) nhưng sau đó lại không phải là một sản phẩm SQL thực sự.

5

Bạn cũng có thể sử dụng câu lệnh Oracle with. Cũng có các câu lệnh tương tự trong các DB khác. Đây là cái mà chúng tôi sử dụng cho Oracle.

with t 
as (select a/b as temp 
from xyz) 
select temp, temp/5 
from t 
/

này có một lợi thế thực hiện, đặc biệt là nếu bạn có một truy vấn phức tạp liên quan đến nhiều truy vấn lồng nhau, vì the WITH statement được đánh giá một lần duy nhất và được sử dụng trong báo cáo tiếp theo.

1

của nó có thể, tôi đoán:

SELECT (A/B) as temp, (temp/5) 
FROM xyz, 
(SELECT numerator_field as A, Denominator_field as B FROM xyz), 
(SELECT (numerator_field/denominator_field) as temp FROM xyz); 
Các vấn đề liên quan