mysql - MySQL多条件查询

标签 mysql

当我有一个连接来自其他两个表的 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/

相关文章:

C# 将mysql中的选择写入变量

php - 定义 php 我的代码有什么问题

如果记录不在临时表中,mysql更新表

php - PHP脚本的任务划分

php + mysql 大查询,循环问题

java - 将 MySql DateTime 类型转换为更友好的类型

php - Mysql实时消息

mysql - 对象值未传递

php - 重新使用从表中提取的数据而无需再次连接到表

MySQL服务器性能