7

我有以下内容从表中返回特定帖子。正如预期的那样,它提供了 11 行。

-- 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);

我有第二张表'wp_raceresult',它记录了一个人的比赛结果。此人在此表中只有 7 个结果。我想获取特定跑步者在这组比赛中所有比赛结果的详细信息,即没有结果的每场比赛都为 NULL。我有 atm 的 SQL 只产生匹配的行。

-- 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

我尝试过使用 FULL OUTER、LEFT、RIGHT 子句和 UNION 但没有成功。任何的想法?

4

2 回答 2

2

既然您提到您已经尝试过LEFT JOIN并且得到的结果不是您期望的结果,那是因为您正在查询runner = 7最终结果。移动子句上的ON语句,它将起作用。

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)

附加信息:

于 2013-09-26T16:18:59.493 回答
-1

如果您需要一张表中的所有记录,并且参考表中的数据匹配,您可以尝试使用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
于 2013-09-26T16:18:37.323 回答