mysql and能连几个_mysql – SQL在连接表上使用条件AND来确保至少匹配两个或多个值...

本文介绍了一种使用SQL查询来找出能同时提供英语和西班牙语服务的记录的方法。通过使用GROUP BY和HAVING COUNT(*)=2或者INNER JOIN的方式,可以有效地筛选出符合条件的服务ID。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有一个名为languages_services的连接表,它基本上连接了表服务和语言.

我需要找到一个能够同时提供ENGLISH(language_id = 1)和ESPANOL(language_id = 2)的服务.

table languages_services

------------------------

service_id | language_id

------------------------

1 | 1

1 | 2

1 | 3

2 | 1

2 | 3

使用上面提供的数据,我想测试language_id = 1 AND language_id = 2,其结果如下所示

QUERY RESULT

------------

service_id

------------

1

显然它不返回service_id = 2的那个,因为它不为Espanol提供服务.

任何提示都非常感谢!

解决方法:

SELECT

service_id

FROM

language_services

WHERE

language_id = 1

OR language_id = 2

GROUP BY

service_id

HAVING

COUNT(*) = 2

要么…

WHERE

lanaguage_id IN (1,2)

GROUP BY

service_id

HAVING

COUNT(*) = 2

如果你总是看两种语言,你可以用连接来做,但是聚合版本更容易适应不同数量的language_ids. (添加OR,或将项添加到IN列表,并将COUNT(*)= 2更改为COUNT(*)= 3等,等等).

但请注意,这种情况非常糟糕.使用这种表格结构,你无能为力.

编辑使用2种语言的连接的示例

SELECT

lang1.service_id

FROM

language_services AS lang1

INNER JOIN

language_services AS lang2

ON lang1.service_id = lang2.service_id

WHERE

lang1.language_id = 1

AND lang2.language_id = 2

标签:mysql,join,inner-join,sql,relational-division

来源: https://codeday.me/bug/20190621/1250656.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值