【问题标题】:SQL - remainder / not belongingSQL - 剩余/不属于
【发布时间】:2015-05-19 07:20:49
【问题描述】:

我正在运行一个 SQL 查询,其中包含一些“id”的 while 约束。 例如:

SELECT table.id
FROM TableOne table
WHERE table.id IN (1, 2, 3, 4)
AND some conditions

如果满足某些条件,查询可能会返回 [1, 2]。我将如何返回 [3, 4],即所有不满足条件但仍然是我要包含的列表的一部分的 id?

谢谢

【问题讨论】:

  • 你用的是sql server还是mysql?
  • 请向我们展示示例输出。您的问题不清楚。

标签: mysql sql sql-server database where


【解决方案1】:

如果这是您获得想要包含并满足条件的 ID 结果的方式

SELECT table.id
FROM TableOne table
WHERE table.id IN (1, 2, 3, 4)
AND some conditions

那么,这就是如何得到你想要包含但不满足条件的ID的结果

SELECT table.id
FROM TableOne table
WHERE table.id IN (1, 2, 3, 4)
AND NOT (some conditions)

【讨论】:

  • 我认为这也是 OP 所需要的,但这可能并不完全正确。如果 id 3 不在表中怎么办。如果 OP 仍想将其显示为输出,则您的解决方案不正确。如果他不这样做,那么您的解决方案就是完美的。
【解决方案2】:
SELECT table.id
FROM TableOne table
WHERE table.id IN (1, 2, 3, 4)
AND NOT some conditions

它应该返回你的结果

【讨论】:

    【解决方案3】:

    您可以创建一个包含您的 ID 列表的表,然后从您的查询中执行 EXCEPT

    SELECT ID FROM
    (
    SELECT 1 ID
    UNION ALL SELECT 2 
    UNION ALL SELECT 3 
    UNION ALL SELECT 4
    )List
    EXCEPT
    SELECT table.id
    FROM TableOne table
    WHERE table.id IN (1, 2, 3, 4)
    AND some conditions
    

    假设:如果您的表不包含查询中列出的 ID,则下面的查询仍将返回该 ID。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-21
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多