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

แสดงหลายแถวที่เลือกด้วย MySQL IN() แบบ Tuple (Id, Name)

การใช้ IN() กับ Tuple (หลายคอลัมน์) ใน MySQL

MySQL รองรับการใช้ IN กับ Tuple (คู่ค่าหลายคอลัมน์) รูปแบบ WHERE (col1, col2) IN ((val1, val2), (val3, val4), ...) เพื่อกรองแถวที่ตรงกับชุดค่าที่กำหนด

สร้างตารางและเพิ่มข้อมูล

mysql> CREATE TABLE DemoTable1045 (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    FirstName VARCHAR(100)
) AUTO_INCREMENT=100;
Query OK, 0 rows affected (0.62 sec)

mysql> INSERT INTO DemoTable1045(FirstName) VALUES('John');
mysql> INSERT INTO DemoTable1045(FirstName) VALUES('Chris');
mysql> INSERT INTO DemoTable1045(FirstName) VALUES('Robert');
mysql> INSERT INTO DemoTable1045(FirstName) VALUES('Mike');
mysql> INSERT INTO DemoTable1045(FirstName) VALUES('Adam');

แสดงข้อมูลทั้งหมด

mysql> SELECT * FROM DemoTable1045;

ผลลัพธ์:

+-----+-----------+
| Id  | FirstName |
+-----+-----------+
| 100 | John      |
| 101 | Chris     |
| 102 | Robert    |
| 103 | Mike      |
| 104 | Adam      |
+-----+-----------+
5 rows in set (0.00 sec)

คำสั่งเลือกแถวที่ตรงกับ Tuple (Id, FirstName) ที่กำหนด

mysql> SELECT * FROM DemoTable1045 tbl
    WHERE (tbl.Id, tbl.FirstName) IN ((101, 'Chris'), (102, 'Robert'), (104, 'Adam'));

ผลลัพธ์:

+-----+-----------+
| Id  | FirstName |
+-----+-----------+
| 101 | Chris     |
| 102 | Robert    |
| 104 | Adam      |
+-----+-----------+
3 rows in set (0.05 sec)

คำอธิบาย

  • (tbl.Id, tbl.FirstName) : Tuple ของคอลัมน์ที่ต้องการเปรียบเทียบ
  • IN ((101, 'Chris'), (102, 'Robert'), (104, 'Adam')) : ชุด Tuple ที่ยอมรับ
  • MySQL จะเปรียบเทียบแบบ Component-wise: Id ตรง และ FirstName ตรง
  • มีประโยชน์เมื่อต้องการกรองด้วย Primary Key แบบ Composite Key หรือเงื่อนไขหลายคอลัมน์พร้อมกัน