Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 是否返回一个表中的所有行,并与另一个表中的行子集匹配?_Sql_Join - Fatal编程技术网

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

Sql 是否返回一个表中的所有行,并与另一个表中的行子集匹配?,sql,join,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 rsriI

我有以下两个表格:

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             
…但我一辈子都找不出一个join语句来返回这个。目前我得到的查询是

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根本没有出现,那么查询将不会返回任何行。

您使用的是左连接

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的风格,您可能必须使用
左外部联接


希望这有帮助

您正在寻找外部联接:

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)

如上所述,您可以通过使用leftouterjoin来获取数据,但是所有匹配的列都将为空,因为SQL引擎将不知道应该从哪个表中显示该列的结果。因此,为了解决这个问题,您必须明确提到相同的列名。在您的情况下,它不适用,因为列名不同。但是对于那些需要帮助的人,你必须使用下面的方法

*, Table1.ID, Table2.ID FROM ......
它将向您显示正确的数据


希望这能帮助有需要的人

左外接:给你好好描述一下,就是这样。我想我对SQL的了解还不够,甚至没有想过在那里进行这样的测试。可能是项目的这一部分超出了我的能力范围……事实上,它返回了
resourcesintroduced
、加入到
resourcepool
中的所有行。我仍然可以通过
rsrisesdID
进行筛选以获得所需的行,但我在任何地方都无法获得所需的空值。