2013-07-30 55 views
8

Ok, tôi gặp vấn đề khi tham gia 2 bảng (với INNER JOIN). bảng đầu tiên containts danh sách loại trong khi bảng thứ hai chứa "dữ liệu"MYSQL INNER JOIN với các trường trống có thể

tôi đã cố gắng như thế này (ecc cho album ảnh, hoặc bài đăng trên blog.):

SELECT galeries_id, galeries_title, 
     photos.photos_id, photos.photos_gal_id, photos.photos_link 
FROM galeries 
INNER JOIN photos 
ON galeries.galeries_id=photos.photos_gal_id 
GROUP BY photos_gal_id 

này mang lại cho tôi kết quả công bằng, tham gia bàn của tôi độc đáo, cũng giống như tôi muốn chúng với một ngoại lệ quan trọng.

Nếu bảng "ảnh" không có hàng chứa "photos_gal_id" (ví dụ "2"), nó sẽ KHÔNG trả về bất kỳ danh mục nào (galeries_id, galeries_title) cho danh mục đó ngay cả khi nó có nghĩa là trong kho bàn.

Đó là logic vì:

ON galeries.galeries_id=photos.photos_gal_id 

Bây giờ tôi cần phải áp dụng phần này để cho tôi thậm chí thoes mà không có một hàng liên quan trong bảng thứ hai

Kết quả tôi cố gắng để nhận được là:

galeries_id  galeries_title  photos_id  photos_link 
    1    blabla    3   test.jpg 
    2    bla bla2          
    3    etata    5   test.jpg 

tôi hy vọng tôi đã giải thích nó đủ tốt :) Cảm ơn bạn ..

Trả lời

20

Để giữ lại các hàng từ galeries không có ID tương ứng trong ảnh, bạn sẽ cần phải tham gia ảnh trên Galeries với LEFT JOIN thay vì INNER JOIN:

SELECT galeries_id, galeries_title, 
     photos.photos_id, photos.photos_gal_id, photos.photos_link 
FROM galeries 
LEFT JOIN photos 
ON galeries.galeries_id=photos.photos_gal_id 
GROUP BY photos_gal_id 

 

này sẽ cung cấp cho bạn:

galeries_id  galeries_title  photos_id  photos_link 
    1    blabla    3   test.jpg 
    2    bla bla2   NULL   NULL     
    3    etata    5   test.jpg 

 

Và nếu bạn có wi sh để thay thế NULL với một chuỗi rỗng, bạn có thể sử dụng:

SELECT 
    IFNULL(photos.photos_id, ''), 
    IFNULL(photos.photos_link, '') 
+0

Cảm ơn bạn rất nhiều vì điều này ... đó là chính xác những gì tôi cần. – wordman

+0

nếu tôi chỉ muốn nhận hàng bằng photos_id = null –

1

Nó sẽ không chỉ là một

LEFT JOIN photos 

Bởi vì bạn muốn các hồ sơ reguardless của thời tiết hay không họ được làm đầy?