Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Truy xuất dữ liệu cho nhiều tham chiếu hoặc đơn lẻ mà không cần toán tử like

Hãy xem xét những điều sau

mysql> select * from employee ;
+------+------+--------+
| id   | name | skills |
+------+------+--------+
|    1 | xyz  | 1,2,4  |
|    2 | abc  | 1,3    |
|    3 | lmn  | 1,2,3  |
+------+------+--------+
3 rows in set (0.00 sec)

mysql> select * from skillset ;
+------+----------+
| id   | skillset |
+------+----------+
|    1 | Python   |
|    2 | Java     |
|    3 | C        |
|    4 | PHP      |
+------+----------+
4 rows in set (0.00 sec)

Cấu trúc này tương tự như cấu trúc của bạn và để thực hiện truy vấn trong tình huống này, tuy nhiên, chúng ta có thể sử dụng find_in_set nhưng điều đó khá kém hiệu quả, đây là một vài ví dụ

mysql> select e.id,
e.name, 
group_concat(s.skillset) as skillset 
from employee e join skillset s 
on find_in_set(s.id,e.skills) > 0 
where find_in_set(1,e.skills) > 0 
 group by e.id ;
+------+------+-----------------+
| id   | name | skillset        |
+------+------+-----------------+
|    1 | xyz  | Python,Java,PHP |
|    2 | abc  | C,Python        |
|    3 | lmn  | Java,Python,C   |
+------+------+-----------------+
3 rows in set (0.00 sec)

select e.id,
e.name, 
group_concat(s.skillset) as skillset 
from employee e 
join skillset s on find_in_set(s.id,e.skills) > 0 
where find_in_set(2,e.skills) > 0  group by e.id ;
+------+------+-----------------+
| id   | name | skillset        |
+------+------+-----------------+
|    1 | xyz  | Python,PHP,Java |
|    3 | lmn  | C,Java,Python   |
+------+------+-----------------+

Giờ đây, một chuẩn hóa thích hợp sẽ làm cho cuộc sống trở nên đơn giản hơn nhiều và sẽ có bảng liên kết sau đây

mysql> select * from employee_skills; 
+------------+----------+
| idemployee | idskills |
+------------+----------+
|          1 |        1 |
|          1 |        2 |
|          1 |        3 |
|          2 |        1 |
|          2 |        3 |
|          3 |        1 |
|          3 |        2 |
|          3 |        3 |
+------------+----------+

Bây giờ thực hiện truy vấn sẽ hiệu quả hơn nhiều trong trường hợp này

mysql> select e.id,
e.name,
s.skillset from employee e 
join employee_skills es on es.idemployee = e.id 
join skillset s on s.id = es.idskills where s.id = 1 ;
+------+------+----------+
| id   | name | skillset |
+------+------+----------+
|    1 | xyz  | Python   |
|    2 | abc  | Python   |
|    3 | lmn  | Python   |
+------+------+----------+

Sử dụng phương pháp cuối cùng, các phép tính phức tạp hơn có thể được thực hiện khá dễ dàng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để lưu trữ 60 Boolean trong Cơ sở dữ liệu MySQL?

  2. Mã lỗi MySQL:1175 trong khi CẬP NHẬT trong MySQL Workbench

  3. Sử dụng Python và MySQL trong Quy trình ETL:Sử dụng Python và SQLAlchemy

  4. Làm thế nào để khởi động máy chủ MySQL từ dòng lệnh trên Mac OS Lion?

  5. Làm thế nào để kết nối mysql với Basex?