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

LEFT JOIN không hoạt động như mong đợi như cung cấp NULL trong MySQL

Tôi cho rằng lý do khiến nó không khớp theo cách bạn nghĩ là do @row_number không đặt lại thành 1 cho mỗi truy vấn con.

Tôi đã thử nghiệm nó, chỉ tham gia hai người đầu tiên (Giáo sư và Tiến sĩ), nhưng sử dụng CROSS JOIN, vì vậy tôi có thể thấy tất cả các giá trị row_number.

+------------+--------+------------+----------+
| row_number | name   | row_number | name     |
+------------+--------+------------+----------+
|          8 | Aamina |          1 | Ashley   |
|          8 | Aamina |          2 | Belvet   |
|          8 | Aamina |          3 | Britney  |
|          8 | Aamina |          4 | Maria    |
|          8 | Aamina |          5 | Meera    |
|          8 | Aamina |          6 | Naomi    |
|          8 | Aamina |          7 | Priyanka |
|          9 | Julia  |          1 | Ashley   |
|          9 | Julia  |          2 | Belvet   |
|          9 | Julia  |          3 | Britney  |
|          9 | Julia  |          4 | Maria    |
|          9 | Julia  |          5 | Meera    |
|          9 | Julia  |          6 | Naomi    |
|          9 | Julia  |          7 | Priyanka |
|         10 | Priya  |          1 | Ashley   |
|         10 | Priya  |          2 | Belvet   |
|         10 | Priya  |          3 | Britney  |
|         10 | Priya  |          4 | Maria    |
|         10 | Priya  |          5 | Meera    |
|         10 | Priya  |          6 | Naomi    |
|         10 | Priya  |          7 | Priyanka |
+------------+--------+------------+----------+

Bạn có thể thấy rằng dường như số hàng được tăng dần và giá trị ban đầu của 1 trong cả hai truy vấn con đã được thực hiện vào thời điểm các hàng được đánh số.

Bạn có thể khắc phục điều này bằng cách sử dụng một biến người dùng riêng biệt trong mỗi truy vấn con.

Nhưng dù sao thì truy vấn này cũng sẽ không hoạt động theo cách bạn muốn, chẳng hạn như nếu bạn có ít Giáo sư hơn các thành viên của các ngành nghề khác.

Thành thật mà nói, tôi sẽ không thực hiện kiểu định dạng cột này trong SQL. Chỉ cần thực hiện bốn truy vấn độc lập, tìm nạp tất cả kết quả vào ứng dụng của bạn và định dạng thành các cột khi bạn xuất. Theo cách đó sẽ đơn giản hơn nhiều và mã đơn giản dễ viết hơn, dễ gỡ lỗi hơn, dễ bảo trì hơn.

Nhận xét lại của bạn:

Công bằng mà nói, thực hiện điều này như một thử thách viết mã là tốt, miễn là bạn (và những người đọc khác) biết rằng trong một dự án thực tế, sử dụng SQL quá thông minh không phải lúc nào cũng là ý tưởng tốt nhất.

Vì bạn đang thực hiện một thử thách mã hóa, bạn nên tự giải quyết nó, vì vậy tôi không thể cung cấp cho bạn giải pháp tạo ra kết quả bên dưới. Nhưng đây là bằng chứng cho thấy điều đó có thể xảy ra (Tôi hứa rằng tôi đã không giả mạo đầu ra, tôi thực sự sao chép và dán nó từ cửa sổ đầu cuối của mình). Chúc bạn thành công!

+------------+-----------+--------+-----------+----------+
| row_number | Professor | Doctor | Singer    | Actor    |
+------------+-----------+--------+-----------+----------+
|          1 | Ashley    | Aamina | Christeen | Eve      |
|          2 | Belvet    | Julia  | Jane      | Jennifer |
|          3 | Britney   | Priya  | Jenny     | Ketty    |
|          4 | Maria     | NULL   | Kristeen  | Samantha |
|          5 | Meera     | NULL   | NULL      | NULL     |
|          6 | Naomi     | NULL   | NULL      | NULL     |
|          7 | Priyanka  | NULL   | NULL      | NULL     |
+------------+-----------+--------+-----------+----------+



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách cài đặt MySQL gem trên Mac OS X

  2. Chỉ nhận các chữ số bằng regexp

  3. Tôi có thể tạo tệp di chuyển cơ sở dữ liệu ruby ​​on rails từ tệp sql MySQL không

  4. Xác thực hình học không gian MySQL wkt

  5. Cách thay đổi mật khẩu cơ sở dữ liệu