2017-12-26 110 views
6

Tôi muốn hiển thị dữ liệu từ 2 bảng và tôi muốn hiển thị tất cả chúng bao gồm dữ liệu không khớp. Tôi đã thử với truy vấn này.Cách sử dụng JOIN trong mysql để hiển thị tất cả dữ liệu không khớp với

SELECT * FROM student s 
LEFT JOIN grade g ON g.student_id=s.student_id 
WHERE s.student_id = 9 

gì tôi nhận được chỉ cho thấy những sinh viên có lớp trong khi những gì tôi cần là hiển thị tất cả các sinh viên ngay cả khi họ không có bất kỳ lớp. Tôi cũng đã thử sử dụng inner join, right join nhưng kết quả cũng giống nhau. Truy vấn nên là gì?

+0

thêm bảng dữ liệu mẫu ??? –

Trả lời

7

Vấn đề là WHERE s.student_id = 9, bởi vì hàng kết hợp un từ bảng bên trái (sinh viên bảng), sẽ có s.student_id rỗng bằng nhau, và điều này mệnh đề where sẽ loại bỏ các hàng với student_id giá trị nullable vì null là không bằng 9 hoặc thậm chí bất cứ điều gì .

Cố gắng di chuyển where đến tình trạng join:

SELECT * 
FROM student s 
LEFT JOIN grade g ON g.student_id=s.student_id AND s.student_id = 9; 

Hoặc sử dụng NOT IN:

SELECT * 
FROM student s 
WHERE s.student_id = 9 
    AND student_id NOT IN(SELECT student_id 
         from grade 
         where student_id is not null); 
+0

Người đầu tiên thực hiện thủ thuật. Cảm ơn rất nhiều. – Abaij

1

Từ những gì bạn nói tôi nghĩ rằng bạn hiểu lầm như thế nào SQL THAM GIA khoản hoạt động. Nếu đó không phải là trường hợp sau đó chúng tôi sẽ cần thêm thông tin về những gì bên trong các bảng tiếng Anh và những gì bạn cần để hiển thị.

truy vấn của bạn là:

SELECT * FROM sinh viên s

LEFT JOIN lớp g ON g.student_id = s.student_id

ĐÂU s.student_id = 9

Những gì bạn cần là:

những gì tôi cần là hiển thị tất cả các sinh viên ngay cả khi họ không có bất kỳ lớp

được truy vấn của bạn yêu cầu gì đối với:

"Chọn tất cả các dữ liệu liên quan đến sinh viên có ID của họ tương đương với 9 trong cả Học sinh và bảng Xếp loại "

Hạn chế đầu tiên cần hỏi là: Bạn có thực sự cần dữ liệu từ bảng Lớp không?

Nếu có thì bạn mệnh đề WHERE là vấn đề và bạn có thể không muốn để có được chỉ sinh viên với ID = 9 mà còn những người khác (sau đó kiểm tra câu trả lời @Brittain Ze 's với NOT IN khoản)

Nếu không (và những gì bạn cần là những gì bạn nói) thì SELECT * FROM Student WHERE student_id = 9 nên thực hiện công việc. Bạn sẽ nhận được thông tin về tất cả các sinh viên, mà không có thông tin về điểm số của họ.

Các vấn đề liên quan