Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Có một truy vấn SQL sẽ luôn trả về kết quả không?

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 / TOPWHERE 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);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. WebApp (Tomcat-jdbc) Bỏ qua kết nối DB tổng hợp ngoại lệ

  2. Kết nối với MySQL DB bằng cách sử dụng đa luồng

  3. Cảnh báo:session_start ():Không thể gửi cookie phiên - tiêu đề đã được gửi bởi (đầu ra bắt đầu lúc

  4. Làm cách nào để tôi có thể viết lại truy vấn này để tránh lỗi:Bạn không thể chỉ định bảng đích để cập nhật trong mệnh đề FROM

  5. SQLAlchemy DELETE Lỗi gây ra do có cả lười tải VÀ phiên bản động của cùng một mối quan hệ