Tùy thuộc vào DBMS, một hoặc nhiều cách sau sẽ hoạt động:
-
SELECT NULL LIMIT 0
(Cú pháp PostgreSQL và MySQL) /SELECT TOP 0 1
(Cú pháp MS SQL Server) -
SELECT NULL WHERE FALSE
(DBMS với kiểu boolean, ví dụ:PostgreSQL)SELECT NULL WHERE 1=0
(hầu hết các DBMS)
Đối với Oracle, chúng sẽ phải có dạng SELECT NULL FROM DUAL
, Tôi tin rằng bạn không thể có SELECT
không có FROM
mệnh đề của một số loại; không chắc phiên bản nào của LIMIT
/ TOP
và WHERE
nó sẽ chấp nhận.
Một tùy chọn phức tạp hơn là tạo một bảng (tạm thời) và không chèn bất kỳ hàng nào vào đó, điều này có thể cung cấp cho bạn bất kỳ số lượng cột nào, sẽ có các loại được liên kết ngay cả khi chúng không chứa giá trị:
-- PostgreSQL
CREATE TEMP TABLE dummy ( a Int, b VarChar(42) );
SELECT * FROM dummy;
-- MS SQL Server
CREATE TABLE #DUMMY ( a Int, b VarChar(42) );
SELECT * FROM #DUMMY;
Trong PostgreSQL, bạn thậm chí có thể tạo bảng không có cột, cho phép bạn có tập hợp kết quả với không hàng và không cột :
CREATE TEMP TABLE empty ();
SELECT * FROM empty;
Một khả năng khác là nếu DBMS có các hàm trả về tập hợp, chúng có thể trả về tập hợp trống. Ví dụ:một lần nữa trong PostgreSQL vì đó là thứ tôi biết rõ nhất, bạn có thể cung cấp phạm vi không hợp lệ cho generate_series()
:
SELECT * FROM generate_series(0,-1);