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
进行筛选以获得所需的行,但我在任何地方都无法获得所需的空值。