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

Làm cách nào để chọn (các) cột theo vị trí số của chúng trong bảng?

Bạn hầu như KHÔNG BAO GIỜ dựa vào số cột trong bảng trong bất kỳ mã nào của bạn (mặc dù về mặt lý thuyết, bạn CÓ THỂ làm như vậy về mặt kỹ thuật).

Có nhiều lý do, một trong những lý do quan trọng nhất là ai đó luôn có thể thay thế bảng và chèn một cột vào đầu / giữa, làm hỏng hoàn toàn mã của bạn.

Lý do thứ hai là các vị trí cột - ngay cả khi bạn giả định rằng bảng không bao giờ thay đổi - làm cho mã hoàn toàn KHÔNG THỂ DÙNG được và do đó không thể duy trì mã. Bạn có nhớ cột 13 là "last_name_3" 2 năm kể từ bây giờ không?

Xin lưu ý rằng nếu vấn đề của bạn là, chẳng hạn như bạn có một cái gì đó như SELECT fn11, fn12, fn13, ... fn32 trong mã của bạn, và bạn cảm thấy như đánh vần fn11..fn32 là một kéo, bạn không chỉ chính xác 100%, mà bạn hoàn toàn nên loại bỏ kéo đã nói qua các thành ngữ Perl, như sau:"SELECT " . join(", ", map { "fn$_" } (11..32));

Phải nói rằng, nếu bạn muốn biết cách thực hiện một cách LÝ THUYẾT, giống như một bài tập "mẹo hay về công nghệ", tôi không biết cách hay để làm điều đó nói chung thông qua DBI, nhưng bạn thường có thể làm điều đó trong cơ sở dữ liệu- cách cụ thể.

Để làm như vậy, bạn cần lưu ý rằng:

  1. Khá nhiều cơ sở dữ liệu đều tạo bảng thông qua một số loại câu lệnh "CREATE TABLE" lấy danh sách các cột ĐƯỢC ĐẶT HÀNG (hầu hết các cơ sở dữ liệu quan hệ thực sự lưu trữ vật lý các giá trị trong hàng theo thứ tự đó, vì vậy nó rất quan trọng - ngay cả khi phép tính quan hệ lý thuyết coi các cột là thứ tự- ít hơn như marcog đã nói).

  2. Khá nhiều TẤT CẢ các tab đều chứa một bảng đặc biệt liệt kê bảng nào chứa cột nào (syscolumns trong Sybase, INFORMATION_SCHEMA.COLUMNS trong MySQL), và bảng đó chứa ID số của một cột được sử dụng để sắp xếp chúng giống như thứ tự "tạo"; hoặc thậm chí trường "đơn hàng" đặc biệt (ví dụ:ORDINAL_POSITION giá trị trong MySQL).

    Vì vậy, bạn có thể - trước thời hạn - truy vấn danh sách các cột có thứ tự cho bảng bạn muốn và thứ tự của chúng. Để truy vấn MySQL, hãy SELECT COLUMN_NAME, ORDINAL_POSITION FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME="XXX" . Lưu trữ dữ liệu trong danh sách @columns (hoặc nếu bạn có nhiều bảng, băm mảng,% cột, với tên bảng là khóa).

    Sau đó, khi tạo một truy vấn, bạn chỉ cần nói

    "select $columns{table1}->[11],$columns{table1}->[13], ...."

    Xin lưu ý rằng thực tế SQL được gửi đến máy chủ sẽ chứa các tên cột, NHƯNG bạn sẽ không mã hóa những tên đó ở bất kỳ đâu trong mã của mình.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ImportError:Không có mô-đun nào có tên mysql.connector sử dụng Python2

  2. Mysql chọn riêng biệt

  3. Cách MySQL hoạt động không phân biệt chữ hoa chữ thường và không phân biệt dấu trong UTF-8

  4. MySQL DROP COLUMN

  5. REPLACE không phân biệt chữ hoa chữ thường trong MySQL?