การใช้ WHERE 1=0 เพื่อไม่ให้คืนข้อมูลใดๆ
เงื่อนไข 1=0 เป็นเงื่อนไขที่เป็นเท็จ (FALSE) เสมอ ใช้เพื่อให้ query ไม่คืนแถวใดๆ เหมาะสำหรับ:
- ทดสอบโครงสร้างตาราง (schema only)
- สร้างตารางใหม่จาก SELECT (CREATE TABLE ... AS SELECT ... WHERE 1=0)
- ทดสอบ query plan / performance โดยไม่ต้องสแกนข้อมูล
- Template สำหรับ dynamic query building
ไวยากรณ์
SELECT * FROM yourTableName WHERE 1=0;
ตัวอย่างการใช้งาน
สร้างตารางทดสอบ:
CREATE TABLE ConditionDemo (
Id INT NOT NULL AUTO_INCREMENT,
Name VARCHAR(10),
PRIMARY KEY(Id)
);
INSERT INTO ConditionDemo(Name) VALUES('Larry'), ('Sam'), ('Mike'), ('Carol'), ('John'), ('Bob');
SELECT ปกติ (คืน 6 แถว):
SELECT * FROM ConditionDemo;
SELECT WHERE 1=0 (คืน Empty set):
SELECT * FROM ConditionDemo WHERE 1=0;
-- Empty set (0.00 sec)
การประยุกต์ใช้จริง
1. สร้างตารางใหม่โครงสร้างเดียวกัน ไม่มีข้อมูล
CREATE TABLE new_table AS
SELECT * FROM old_table WHERE 1=0;
2. ตรวจสอบ metadata / column info
-- ได้ column names, types โดยไม่ต้องอ่านข้อมูล
SELECT * FROM large_table WHERE 1=0;
3. Dynamic SQL Building (Application Code)
-- Python example
conditions = ["1=0"] # base condition
if user_filter:
conditions.append(f"name = '{user_filter}'")
if date_filter:
conditions.append(f"created_at >= '{date_filter}'")
query = f"SELECT * FROM users WHERE {' AND '.join(conditions)}"
# ผลลัพธ์: SELECT * FROM users WHERE 1=0 AND name = 'John' ...
ตัวเลือกอื่น: WHERE FALSE
SELECT * FROM yourTableName WHERE FALSE;
MySQL รองรับ FALSE (เป็น alias ของ 0) และ TRUE (เป็น alias ของ 1)
ข้อควรระวัง
- Optimizer อาจตัด table scan ทิ้งไปเลย (constant folding)
- EXPLAIN จะแสดง
Impossible WHEREหรือconsttable - ไม่ควรใช้ใน production query ที่ต้องการข้อมูลจริง