首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有IN子句的MySQL请求,带有耦合标识符的数组

带有IN子句的MySQL请求,带有耦合标识符的数组
EN

Stack Overflow用户
提问于 2017-10-20 17:04:13
回答 4查看 1.3K关注 0票数 2

我有一个用户表,其中包含一对标识符:idtype,如下所示:

代码语言:javascript
运行
复制
id | type | name
----------------
15 | 1    | AAA
16 | 1    | BBB
15 | 2    | CCC

我想得到一个列表,匹配id和类型。

我目前使用的是concat系统,它的工作原理是:

代码语言:javascript
运行
复制
SELECT u.id,
    u.type,
    u.name
FROM user u
WHERE CONCAT(u.id, '-', u.type) IN ('15-1', '16-1', '17-1', '10-2', '15-2')

但是,我觉得这可能会更好,怎样才是正确的方法呢?

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-10-20 17:25:06

您可以在mysql中使用以下方法

代码语言:javascript
运行
复制
with dat as 
(
 select 17 id, 1 type, 'AAA' t
 union all
 select 16 id, 1 type, 'BBB' t
 union all
 select 17 id, 2 type, 'CCC' t
)
-- end of testing data 
select *
from dat
where (id, type) in (
 -- query data
  (17, 1), (16, 1)
)
票数 3
EN

Stack Overflow用户

发布于 2017-10-20 17:31:24

IN可以对值的“元组”进行操作,比如这个(a, b) IN ((c,d), (e,f), ....)。使用此方法(应该更快),因为您不对"a“和"b”执行串接操作,然后对字符串进行比较;相反,您正在比较对值、未处理的值和使用适当的比较操作(即,不总是字符串比较)。

此外,如果"a“和/或"b”是字符串值,那么使用concat技术本身可能会导致不明确的结果。("1-2“、"3")和("1”、"2-3")对连接到相同的结果"1-2-3“。

票数 1
EN

Stack Overflow用户

发布于 2017-10-20 17:09:23

你可以把它们分开。不确定它是否更有效,但至少您可以保存部分内容:

代码语言:javascript
运行
复制
SELECT u.id,
    u.type,
    u.name
FROM user u
WHERE (u.id = 15 AND u.type = 1) 
OR (u.id = 16 AND u.type = 1) 
OR (u.id = 17 AND u.type = 1) 
OR (u.id = 10 AND u.type = 2) 
OR (u.id = 15 AND u.type = 2)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46853977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档