当我有一个连接来自其他两个表的 id 的表时,我希望能够查询多个语句。
我的三张 table
destination:
id_destination, name_destination
keyword:
id_keyword, name_keyword
destination_keyword:
id_keyword, id_destination
最后一个连接目的地和关键字表中的 ID,以便将目的地与关键字相关联。
基于关键字获取目的地的查询将如下所示
SELECT destination.name_destination FROM destination
NATURAL JOIN destination_keyword
NATURAL JOIN keyword
WHERE keyword.name_keyword like _keyword_
是否可以查询多个关键字,假设我想获取与列表 sunny, ocean, fishing
中的所有或部分关键字匹配的目的地,并按匹配次数排序。我将如何前进?我应该重组我的表吗?我是 SQL 的新手,非常想要一些输入。
最佳答案
从 keyword
开始对表进行连接,并计算目标连接的次数:
select
d.id_destination,
d.name_destination,
count(d.id_destination) as matches
from keyword k
join destination_keyword dk on dk.keyword = k.keyword
join destination d on d.id_destination = dk.id_destination
where name_keyword in ('sunny', 'ocean', 'fishing')
group by 1, 2
order by 3 desc
此查询假定 name_keyword
值是单个单词,如“sunny”。
使用自然连接不是一个好主意,因为如果表结构发生变化,两个自然连接的表被更改为添加了相同名称的列,您的查询将突然停止工作。此外,通过显式声明连接条件,您的代码的读者将立即了解表的结构,并可以根据需要修改它以添加非键条件。
要求只有键列共享相同的名称也是限制性的,因为它需要不自然的列名称,如“name_keyword”而不是简单的“name” - 后缀“_keyword”是多余的并且没有增加任何值(value)并且仅因为你的 < em>必须拥有它,因为您使用的是自然连接。
自然连接几乎不节省任何输入(并且经常导致更多输入)并且对连接类型和名称施加限制并且很脆弱。
要避免它们。
关于mysql - MySQL多条件查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16403437/