Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ทำไมต้องใช้ WHERE 1=0 ใน MySQL?

การใช้ 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 หรือ const table
  • ไม่ควรใช้ใน production query ที่ต้องการข้อมูลจริง