使用内部联接的MySQL搜索结果

时间:2015-05-27 17:45:44

标签: mysql sql join

我正在建立一个超级英雄数据库。我想将每个表连接在一起,以便用户可以搜索任何内容,而不是每次用户执行查询时都必须进行INNER JOIN。

例如,用户可以搜索超级英雄来自的漫画系列,您只需更改SELECT和WHERE子句即可。

在搜索超级英雄的力量时,这会返回一个好结果:

SELECT sh.heroName, pwr.name FROM superhero sh
INNER JOIN superheroPower sh_pwr ON sh.id = sh_pwr.superheroID
INNER JOIN power pwr ON sh_pwr.powerID = pwr.id
WHERE sh.heroName = 'Superman';

这将返回一个空集:

SELECT sh.heroName, pwr.name FROM superhero sh
INNER JOIN superheroPower sh_pwr ON sh.id = sh_pwr.superheroID
INNER JOIN power pwr ON sh_pwr.powerID = pwr.id
INNER JOIN superheroAffiliation sh_aff ON sh.id = sh_aff.superheroID 
INNER JOIN affiliation aff ON sh_aff.affiliationID = aff.id
INNER JOIN superheroComic sh_c ON sh.id = sh_c.superheroID
INNER JOIN comic c ON sh_c.comicID = c.id
INNER JOIN publisher pub ON c.publisherID = pub.id
INNER JOIN comicAuthor c_a ON c.id = c_a.comicID
INNER JOIN author a ON c_a.authorID = a.id
WHERE sh.heroName = 'Superman';

有没有办法搜索已经INNER JOINed在一起的所有表格的数据库?我应该做LEFT JOIN还是不同类型的JOIN?

1 个答案:

答案 0 :(得分:1)

如果任何地方都没有NULL(例如,连接中的每个链接总是在另一边有某些东西),那就可以了。

但是,因为在任何情况下,如果连接的一侧没有结果,那么它就是INNER将消除行(不匹配的行不会出现在INNER连接中)。

所以要回答你的直接问题,假设你关心的关键是heroName,你应该从超级英雄开始,然后加入其他一切。如果您希望能够使用任何字段作为键,则应在所有连接上使用完全外部。