【问题标题】: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)

标签: sql relational-division


【解决方案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;

【讨论】:

  • 有趣。在我理解了你的答案之后我才理解了这个问题:)
猜你喜欢
  • 1970-01-01
  • 2011-12-04
  • 2011-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多