2012-01-30 55 views
5

Tôi thích sử dụng SELECT trên bảng có thể chứa một số trường, nhưng có thể không. Nếu không, giá trị có thể được trả về như NULL như JOIN LEFT sẽ làm cho các hàng không tồn tại.MySQL CHỌN một trường là NULL nếu không tồn tại trong bảng

Ví dụ: một cái gì đó như thế này Pseudo-SQL:

SELECT id, email IF EXISTS, name, address FROM users; 

nên chạy mà không có lỗi trên bảng 'người dùng' mà không có trường 'email' nhưng trả về email = NULL sau đó.

+5

Tại sao bạn sẽ không biết cấu trúc của bảng? – MMM

+0

Điều này có thể hữu ích: http://stackoverflow.com/questions/5448518/query-to-check-if-field-exists-and-then-return-the-result-set –

+0

Tôi có thể lấy cấu trúc của bảng với các câu lệnh sql khác, nhưng điều này phức tạp và tốn kém. Mặt khác, 'SELECT *' sẽ xuất tất cả các cột hiện có, mà không cần biết cái nào có trước đó. Vì vậy, tôi muốn có được sự tiện lợi này mà không cần truy vấn thêm trước. – dronus

Trả lời

2

Điều bạn muốn có thể không phải là được thực hiện bằng SQL thuần túy.

Về cơ bản, bạn muốn SQL có thể chọn một cột có thể không tồn tại theo điều kiện. Không thể phân tích cú pháp SQL này - tất cả các cột được chọn phải tồn tại hoặc truy vấn sẽ không hợp lệ. Tuy nhiên, bạn có thể đạt được điều này là mã ứng dụng bằng cách truy vấn các bảng danh mục để kiểm tra lược đồ của cơ sở dữ liệu bạn đã kết nối và tự động xây dựng SQL dựa trên đó.

truy vấn này có thể giúp mã ứng dụng của bạn để xây dựng truy vấn của bạn:

select COLUMN_NAME 
from INFORMATION_SCHEMA.COLUMNS 
where TABLE_NAME = 'users' 
and TABLE_SCHEMA = 'YOUR-DB-NAME'; 
Các vấn đề liên quan