Trên thực tế, tôi đã thấy loại điều này được sử dụng trong các báo cáo BIRT. Truy vấn được truyền cho thời gian chạy BIRT có dạng:
select a,b,c from t where a = ?
và '?' được thay thế trong thời gian chạy bằng một giá trị tham số thực tế được chọn từ hộp thả xuống. Các lựa chọn trong trình đơn thả xuống được đưa ra bởi:
select distinct a from t
union all
select '*' from sysibm.sysdummy1
để bạn có được tất cả các giá trị có thể cộng với " *
". Nếu người dùng chọn " *
" từ hộp thả xuống (có nghĩa là tất cả các giá trị của một nên được chọn), truy vấn phải được sửa đổi (bằng Javascript) trước khi được chạy.
Kể từ "?" là một tham số vị trí và PHẢI vẫn ở đó để những thứ khác hoạt động, Javascript sửa đổi truy vấn thành:
select a,b,c from t where ((a = ?) or (1==1))
Điều đó về cơ bản loại bỏ ảnh hưởng của mệnh đề where trong khi vẫn giữ nguyên tham số vị trí.
Tôi cũng đã thấy trường hợp AND được sử dụng bởi các lập trình viên lười biếng trong khi tự động tạo một truy vấn SQL.
Giả sử bạn phải tự động tạo một truy vấn bắt đầu bằng select * from t
và kiểm tra:
- tên là Bob; và
- mức lương> $ 20.000
một số người sẽ thêm cái đầu tiên bằng WHERE và những cái tiếp theo với AND do đó:
select * from t where name = 'Bob' and salary > 20000
Các lập trình viên lười biếng (và đó không nhất thiết là một đặc điểm xấu ) sẽ không phân biệt giữa các điều kiện được thêm vào, họ sẽ bắt đầu select * from t where 1=1
và chỉ thêm các mệnh đề AND sau đó.
select * from t where 1=1 and name = 'Bob' and salary > 20000