在 SQL 中,是不是有类似“IN”的东西,但是对于多个“AND”条件?

Posted

技术标签:

【中文标题】在 SQL 中,是不是有类似“IN”的东西,但是对于多个“AND”条件?【英文标题】:In SQL, is there something like "IN", but for multiple "AND" conditions?在 SQL 中,是否有类似“IN”的东西,但是对于多个“AND”条件? 【发布时间】:2014-06-05 14:34:23 【问题描述】:

在 SQL 中,是否有类似“IN”的东西,但用于多个“AND”条件而不是多个“OR”条件?

编辑:我现在看到这是一个愚蠢的问题。我真正的意思是: 如果我有这样的表:

_id time_entry_id tag_id

1 1 1

2 1 2

3 1 3

4 2 2

5 2 3

是否有一个 SQL 命令只返回 time_entry_ids,其中 tag_id = 1 AND 2 AND 3。

【问题讨论】:

一个字符串怎么能同时是AB呢?这没有意义。 你希望从这种函数中得到什么样的语法?你认为你会如何使用IN 之类的东西为AND 工作? 请添加一个用例。类似于 MSSQL 的 ALL().. where F >= ALL (subquery) 【参考方案1】:

您所描述的称为关系划分。 SQL 中没有此操作符。

有两种常见的解决方案。

第一个解决方案是对您要查找的每个值进行自联接。这样您就可以在 WHERE 子句中编写一个引用同一列并比较三个不同值的表达式。

SELECT t1.time_entry_id
FROM table_like_this t1
JOIN table_like_this t2 USING (time_entry_id)
JOIN table_like_this t3 USING (time_entry_id)
WHERE t1.tag_id = 1 AND t2.tag_id = 2 AND t3.tag_id = 3;

第二种解决方案是查找所有具有任何您要查找的值的行,如果您找到一组包含所有三个的此类行,则该组通过您的关系划分搜索。

SELECT time_entry_id
FROM table_like_this
WHERE tag_id IN (1,2,3)
GROUP BY time_entry_id
HAVING COUNT(DISTINCT tag_id) = 3;

【讨论】:

有趣。在我理解了你的答案之后我才理解了这个问题:)

以上是关于在 SQL 中,是不是有类似“IN”的东西,但是对于多个“AND”条件?的主要内容,如果未能解决你的问题,请参考以下文章

`psql` 是不是有类似于 `bash` 中的 `$PATH` 的东西来搜索 SQL 脚本?

Java 是不是有“IN”运算符或类似 SQL 的函数? [复制]

使用类似语法的 SQL IN 语句? [复制]

判断包含字符串,有没有类似sql中的 in的函数

Mysql、SQL server有没有PL/SQL?或者是类似PL/SQL的东西?PL/SQL是否存储过程?

Swift 是不是有类似“ref”关键字的东西强制参数通过引用传递?