我有以下两个表:
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
根本没有出现,那么查询根本不会返回任何行。
答案 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");}}>
它将为您显示正确的数据。
希望这可以帮助需要帮助的人。 ;)