6

我有以下两个表:

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 匹配的那些行,返回第一个表旁边相关行上的那些行,例如:

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根本没有出现特定的查询,则查询根本不会返回任何行。

4

3 回答 3

10

您正在寻找外部联接:

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)
于 2013-10-17T19:39:56.077 回答
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.

希望这可以帮助!

于 2013-10-17T19:33:58.510 回答
0

您可以使用上面提到的 LEFT OUTER JOIN 来获取数据,但所有匹配的列都将为空,因为 SQL 引擎会混淆它应该从哪个表显示该列的结果。因此,要解决这个问题,您必须明确提及相同的列名。在您的情况下,它不适用,因为列名不同。但是对于那些需要帮助的人,你必须使用下面的东西,

*, Table1.ID, Table2.ID FROM ......

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

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

于 2018-06-26T07:04:40.757 回答