2009-02-05 58 views
7

Tôi đã thực hiện một số truy vấn mà tôi đang duy trì và một lập trình viên đã đưa ra các truy vấn "ở đâu 1 = 1" với tôi luôn luôn có vẻ như là đúng.Tại sao một truy vấn sql có "ở đâu 1 = 1"

Có lợi ích gì cho điều này không?

trùng lặp:Why would someone use WHERE 1=1 AND in a SQL clause?

Câu hỏi đó không phải là một câu trả lời cho câu hỏi này.

mệnh đề where:

select * from table where 1=1 and sStatus not in ('status1','status2','status3') 

Không lập trình hoặc nếu phát biểu để đẩy một và trong đó. Một truy vấn thẳng.

Nếu bạn có thể hủy đóng này, tôi muốn biết liệu có một mục đích để tôi có thể viết lại và loại bỏ 1 = 1 nếu nó là không cần thiết.

+0

Không có mục đích nào tôi có thể xem và đánh giá bằng câu trả lời được chấp nhận trong liên kết có vẻ như 1 = 1 sẽ được tối ưu hóa. Có lẽ ai đó đã làm một chương trình cut'n'paste nhỏ. –

Trả lời

16

Đó là truy vấn động? Đôi khi điều đó hữu ích khi tạo truy vấn động dựa trên các tham số tùy chọn.

1

Tôi đã nhìn thấy hai lý do cho điều này, khi bạn luôn muốn có một kết quả đúng, hoặc khi có được sẽ là một số tùy ý "và condition = giá trị" nối vào báo cáo kết quả

6

tôi sử dụng này cho năng động, nơi điều khoản khi tôi đang làm một số lập trình lười biếng và không muốn luôn luôn kiểm tra nếu mệnh đề là trống để xác định nếu bây giờ tôi cần một "AND" giữa các điều khoản năng động của tôi.

4

Điều này thực sự chỉ có ý nghĩa trong truy vấn động. Nếu bạn đang thêm các tham số trong một vòng lặp thay vì phải kiểm tra nếu có một WHERE thì bạn chỉ có thể nối thêm VÀ Cột = Giá trị mỗi lần.

10

Nếu bạn đang xây dựng động một mệnh đề where, bạn có thể hơi lười và giả sử rằng mọi mệnh đề bạn thêm đều có thể được bắt đầu bằng "VÀ", ví dụ:

$str="select foo from bar where 1=1"; 

if ($filter1) 
{ 
    $str.=" and col1='frobozz'"; 
} 
0

Điều đó rất thú vị ... Mệnh đề WHERE không chứa gì ngoài 1 = 1? Tôi đã thấy điều này thường xuyên trong các nỗ lực tiêm SQL trong đó mệnh đề WHERE được đặt thành xyz="something" OR 1=1; làm phương tiện để luôn trả về danh sách kết quả.

Bạn có thể cho chúng tôi biết thêm về những gì đang xảy ra với truy vấn này để chúng tôi có thể trả lời câu hỏi tốt hơn không?

  • Nicholas
8

Nếu bạn tự động muốn thêm các hạn chế để truy vấn của bạn, nó làm cho bạn sống dễ dàng hơn:

string sql = "SELECT * FROM table WHERE 1=1"; 

if (someflag) { 
    sql += " AND valid = 1"; 
} 

if (someotherflag) { 
    sql += " AND special = 1"; 
} 

execute(sql); 

Without WHERE 1 = 1 bạn sẽ trong mỗi trường hợp phải kiểm tra xem đó là hạn chế đầu tiên bạn thêm vào (và sau đó sử dụng WHERE ...) hoặc nếu bạn đã thêm một số hạn chế khác trước (và sau đó thêm AND ...).

Các vấn đề liên quan