2010-05-24 36 views
15

Tôi có truy vấn nàyMysql Left Tham Null quả

SELECT articles.*, 
     users.username AS `user` 
FROM `articles` 
LEFT JOIN `users` ON articles.user_id = users.id 
ORDER BY articles.timestamp 

Về cơ bản nó sẽ trả về danh sách các bài báo và tên người dùng rằng bài báo có liên quan đến. Bây giờ nếu không có mục nhập nào trong bảng người dùng cho một id người dùng cụ thể, thì biến số users là NULL. Có anyway để làm cho nó rằng nếu nó null của nó trả về một cái gì đó như "Người dùng không tìm thấy"? hoặc tôi sẽ phải làm điều này bằng cách sử dụng php?

Trả lời

33

Sử dụng:

SELECT a.*, 
      COALESCE(u.username, 'User Not Found') AS `user` 
    FROM ARTICLES a 
LEFT JOIN USERS u ON u.id = a.user_id 
ORDER BY articles.timestamp 

Tài liệu:

Lý do để lựa chọn COLALESCE qua IF hoặc IFNULL là liên hiệp là tiêu chuẩn ANSI, trong khi các phương pháp khác không triển khai đáng tin cậy trên các cơ sở dữ liệu khác. Tôi sẽ sử dụng CASE trước khi tôi nhìn vào IF bởi vì một lần nữa - CASE là tiêu chuẩn ANSI, làm cho nó dễ dàng hơn để chuyển truy vấn đến cơ sở dữ liệu khác.

+0

Gota chờ 8 phút để chấp nhận ...: P – Ozzy

1

Bạn có thể sử dụng IF() nơi trong Oracle bạn đã sử dụng giải mã.

Vì vậy

SELECT articles.*, IF(users.username IS NULL, 'No user found', users.username) AS `user` 
FROM `articles` LEFT JOIN `users` ON articles.user_id = users.id 
ORDER BY articles.timestamp 

nên làm việc. Lưu ý: Tôi không có mysql tiện dụng, vì vậy đã không kiểm tra truy vấn. Nhưng nên làm việc với những sửa đổi nhỏ nếu nó không thành công. Đừng downvote;)

3

Bạn có thể sử dụng chức năng IFNULL:

SELECT articles.*, IFNULL(users.username, 'User Not Found') AS `user` 
FROM `articles` LEFT JOIN `users` ON articles.user_id = users.id 
ORDER BY articles.timestamp 
0

SELECT articles.*, 
     IFNULL(users.username,'User Not Found') AS `user` 
FROM `articles` 
LEFT JOIN `users` ON articles.user_id = users.id 
ORDER BY articles.timestamp 
+0

dấu ngoặc kép đúp vào tài khoản Không tìm thấy? ;) –

+0

Không được khuyến nghị. :) –