2013-09-26 57 views
5

Tôi có các mục sau đây trả về các bài đăng cụ thể từ một bảng. Theo dự kiến, nó cung cấp 11 hàng.MYSQL JOIN với điều khoản IN

-- SQL gives 11 rows 
select p.ID from wp_posts p where p.ID IN (2596, 2597, 2598, 2600, 2849, 2928, 2851, 2852, 3011, 2854, 2855); 

Tôi có bảng thứ hai 'wp_raceresult' ghi lại kết quả cuộc đua của một người. Người này chỉ có 7 kết quả trong bảng này. Tôi muốn nhận được các chi tiết của tất cả các kết quả cuộc đua trong tập hợp các chủng tộc này cho một vận động viên cụ thể, tức là NULL cho mỗi cuộc đua mà không có kết quả. SQL i có atm chỉ kết quả các hàng phù hợp.

-- SQL only gives 7 rows 
select p.ID,rr.leaguepoints from wp_posts p 
join wp_raceresult rr on p.id=rr.race 
where p.ID IN (2596, 2597, 2598, 2600, 2849, 2928, 2851, 2852, 3011, 2854, 2855) 
and runner=7 

Tôi đã thử sử dụng các mệnh đề FULL OUTER, LEFT, RIGHT và UNION nhưng không thành công. Bất kỳ ý tưởng?

Trả lời

1

Vì bạn đã nói rằng bạn đã cố gắng LEFT JOIN và kết quả bạn nhận được là không phải là bạn mong đợi, đó là vì bạn đang truy vấn runner = 7 trong kết quả cuối cùng. Di chuyển câu lệnh trên mệnh đề ON và nó sẽ hoạt động.

SELECT p.ID, 
     rr.leaguepoints 
FROM wp_posts p 
     LEFT JOIN wp_raceresult rr 
      ON p.id = rr.race AND 
       rr.runner = 7        -- <<=== move it here 
WHERE p.ID IN (2596, 2597, 2598, 2600, 2849, 2928, 2851, 2852, 3011, 2854, 2855) 

Thông tin thêm:

-1

Nếu bạn cần tất cả các bản ghi từ một bảng, và phù hợp với dữ liệu trong bảng tham chiếu, bạn có thể thử với các LEFT JOIN

select 
    p.ID, 
    rr.leaguepoints 
    from wp_posts p 
    LEFT join wp_raceresult rr on p.id=rr.race 
    where p.ID IN (2596, 2597, 2598, 2600, 2849, 2928, 2851, 2852, 3011, 2854, 2855) 
    and runner=7