当前位置: 首页 > 面试题库 >

MySQL多个IN条件可以使用同一表进行子查询

秦景同
2023-03-14
问题内容

我有多个IN条件与子查询。

SELECT
    S.name,
    S.email
FROM something S
WHERE 
    1 NOT IN (SELECT id FROM tags WHERE somethingId = S.id)
    AND 2 NOT IN (SELECT id FROM tags WHERE somethingId = S.id)
    AND 3 NOT IN (SELECT id FROM tags WHERE somethingId = S.id)

也许有更好的解决方案?就像是:

    (1, 2, 3) NOT IN (SELECT id FROM tags WHERE somethingId = S.id)

问题答案:

重新编写以NOT EXISTS代替使用。即,当某标签中没有某行的somethingId等于s.id并且id为1、2或3时,即从S返回。

SELECT
    S.name,
    S.email
FROM something S
WHERE NOT EXISTS (SELECT 1 FROM tags WHERE id in (1, 2, 3) and somethingId = S.id)

也是NOT EXISTS“ null-safe”。(NOT IN (select returning a null)将完全不返回任何行。)



 类似资料:
  • 我有一个和这个问题很相似的问题。 我正在从表1中为表2中的字段3和字段4的所有匹配唯一组合选择所有数据。 我希望我的where子句类似于: 但这是Hibernate不允许的。 我已经尝试推出where子句,使其具有两个子查询,并根据结果检查field1和field2,但似乎子查询总是必须返回多列。我使用group by完成了这个操作,但是Hibernate会自动将group by中的列添加到投影列

  • 问题内容: 上面的语句返回3行。但是下面的语句仅返回2行。 我知道为什么会这样,但是有一种方法可以强制item_id 1返回两次? 我要退货的示例: id-> 1筹码€2.50 id-> 1筹码€2.50 id-> 2可口可乐€1.60 -------------------- 总计€6.60 问题答案: 您可以加入另一个表,例如 或者只是在您的应用程序中复制它们。 您实际上不需要做您所要的。

  • 问题内容: 我有24个数据库,其中的表标记为。 我有另一个数据库,其中包含该表的所有数据库的列表。 我遍历数据库列表并查询我的表以为每个数据库发送邮件。 这个问题是,PHP脚本被搁置了,比方说,第3个数据库,同时发送500封电子邮件,然后离开其他数据库等待轮到他们。 我试图弄清楚如何同时查询所有24个数据库并同时发送电子邮件队列。 有什么建议? 问题答案: 使用curl_multi_open可以做

  • 问题内容: 好的,我想我可能会忽略一些显而易见的/简单的事情…但是我需要编写一个查询,该查询仅返回与同一列上的多个条件匹配的记录… 我的表是一个非常简单的链接设置,用于将标志应用于用户… 等等…在这种情况下,您会看到联系人99和100都被标记为“志愿者”和“已上传” … 我需要做的是返回仅与通过搜索表单输入的多个条件相匹配的那些contactid … contactid必须与所有选择的标志匹配…在

  • 好吧,我想我可能忽略了一些明显的/简单的事情...但我需要编写一个查询,该查询只返回同一列上符合多个条件的记录... 我的表是一个非常简单的链接设置,用于向用户应用标志... 等等。在这种情况下,您将看到联系人99和100都被标记为“志愿”和“上载”。 我需要能够做的是返回那些联系人ID只匹配通过搜索表单输入的多个条件...联系人ID必须匹配所有选择的标志...在我看来,SQL应该类似于: 但是.

  • 我有一个案例,需要找出不同版本的表的同一字段之间的差异。 例如: 我有一个名为BankAccount的表,其字段如下 编号、余额、日期等。 现在我想要实现的基本上是在这个表上针对两个不同的日期运行一个select,并找出日期1和日期2的balance字段值之间的差异。 更像:。 我知道,我可以使用其中一个作为分离条件来运行两个选择,这样我至少可以得到两个日期之间的公共记录。我的问题是发现差异和使用