返回一个表中的所有行,并与另一个表中的行子集匹配?

时间:2013-10-17 19:23:06

标签: sql join

我有以下两个表:

rsrpID  rsrpName
1       Library Catalog
2       Interlibrary Loan
3       Academic Search Complete
4       JSTOR
5       Project Muse
6       LibGuides
7       Web Resource
8       Other (please add to Notes)
9       Credo Reference

rsriID  rsrirsrpID  rsrisesdID
603     6           243
604     1           243
605     7           243
606     8           244
607     6           245
608     8           245

我要做的是返回整个第一个表,并且,对于第二个表中与第一个表中的rsrpID匹配的那些行,返回第一个表旁边相关行的那些行,例如:< / p>

rsrpID  rsrpName                    rsrisesdID
1       Library Catalog             243
2       Interlibrary Loan           
3       Academic Search Complete    
4       JSTOR                       
5       Project Muse                
6       LibGuides                   243
7       Web Resource                243
8       Other (please add to Notes) 
9       Credo Reference             

...但我不能为我的生活弄清楚一个会返回这个的连接声明。目前我给出的查询是

select rp.rsrpID as ID, rp.rsrpName as Name,
    (select if((count(rsrisesdID) > 0), 'checked', '') 
         from resourcesintroduced ri 
        where (ri.rsrirsrpID = rp.rsrpID) 
          and (rsrisesdID = 243) ) as 'checked' 
  from resourcesintroduced ri,
     resourcepool rp 
 where rsrisesdID = 243 
 group by ID 
 order by Name asc;

正如您所看到的那样,查询很笨拙,如果某个rsrisesdID根本没有出现,那么查询根本不会返回任何行。

3 个答案:

答案 0 :(得分:6)

您正在寻找外部加入:

select rp.rsrpID as ID, rp.rsrpName as Name, ri.rsrisesdID
  from resourcepool rp 
  left outer join resourcesintroduced ri on (ri.rsrirsrpID = rp.rsrpID and ri.rsrisesdID = 243)

答案 1 :(得分:1)

您使用LEFT JOIN

SELECT
    rsrpID,
    rsrpName,
    vrsrisesdID
FROM
    rp LEFT JOIN
    ri ON rp.rsrpID = ri.rsrirsrpID

返回:

1   Library Catalog                 243
2   Interlibrary Loan               NULL
3   Academic Search Complete        NULL
4   JSTOR                           NULL
5   Project Muse                    NULL
6   LibGuides                       245
6   LibGuides                       245
7   Web Resource                    243
8   Other (please add to Notes)     244
8   Other (please add to Notes)     245
9   Credo Reference                 NULL

根据DBMS的风格,您可能必须使用LEFT OUTER JOIN

希望这有帮助!

答案 2 :(得分:0)

您可以通过使用如上所述的LEFT OUTER JOIN获取数据,但是所有匹配的列都将为空,因为SQL引擎将从应该显示该列结果的哪个表中混淆。因此,要解决此问题,您必须明确提及相同的列名。您的情况不适用,因为列名不同。但是对于那些需要帮助的人,您必须使用类似以下的内容,

<TouchableWithoutFeedback onPress={()=>{ Alert.alert("onPress");}}>

它将为您显示正确的数据。

希望这可以帮助需要帮助的人。 ;)