mysql内部连接,带3个表

yvfmudvl  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(366)

我在这里尝试过各种各样的解决方案,但我认为我遗漏了什么,或者我的数据库结构完全错了。我有以下三张table

Info (id, title, msg, status)
Countries (id, country)
Connect (infoid, countryid, status)

countries表获得了国家的名称和每个国家的唯一id。connect表用于将infoid和countryid与状态连接在一起,info表保存其余信息。
我给出了一个国家,例如英国,我试图从国家表中获取国家id( countries.country = UK ),然后获取所有可用结果,其中 connect.countryid = countries.id 以及 connect.status = 1 从connect表,最后显示info表中的title和msg,其中 info.id = connect.infoid 以及 info.status = 1 .
这是有意义的还是我的数据库结构完全错误?有人能帮我实现上述结果吗?

xienkqul

xienkqul1#

首先,最好将表名从一个国家更改为另一个国家。或者,您可以使用信息和连接来保持一致性。
你问过你的数据库结构设计。首先我们需要知道,国家和信息之间的关系是什么?一对一?一对多?多对一?我猜是多对多。这意味着一个国家可能有多个信息,一个信息可以被多个国家共享。
如果是这样,您的设计就可以了,您需要的代码如下所示:

SELECT
    Countries.country,
    Info.title,
    Info.msg
FROM Countries
INNER JOIN Connect ON Countries.id = Connect.countryid
INNER JOIN Info ON Connect.infoid = Info.id
WHERE
    Countries.country = UK
AND Connect.status = 1
AND Info.status = 1;

此外,我还有两个建议。
首先,不要使用列名状态,因为它是MySQL5.7中的[关键字和保留字]http://dev.mysql.com/doc/refman/5.7/en/keywords.html].
第二,如果你仍然想显示没有任何信息的国家,你应该使用左连接而不是内部连接。

相关问题