gpt4 book ai didi

sql - “where-in”子句中的强制条件匹配

转载 作者:行者123 更新时间:2023-11-29 14:26:26 25 4
gpt4 key购买 nike

考虑一个简单的 where 子句

select * from table_abc where col_a in (1,2,3)

我知道现在的情况

  • 如果 1,2,3 不存在,我不会得到任何结果
  • 如果 1,2,3 存在,我将得到与 1,2,3 相关的所有结果
  • 如果 1 存在而 2,3 不存在,我将只得到与 1 相关的结果。

我的问题是我们是否可以针对以下条件执行查询

  • 如果 1 存在而 2,3 不存在,我仍然应该得到与 1,2,3 相关的所有结果

  • 但是,如果 1,2,3 不存在,我将得不到任何结果

    换句话说,我可以将 where-in 子句中的特定值设置为强制性的吗?我们如何更改当前查询?

编辑:正如评论中所指出的,我忘记添加表结构。我最好也解释用例。

表 1:管理员

ID  admin_id
-------------
1 001
2 002

表 2:事件

ID  event_id
-------------
1 110
2 220

表 3:Admins_Events

admin_id  event_id
-------------
001 110
001 220
002 220

现在,作为过滤的一部分,假设我有查询

SELECT "admins"."admin_id", "events"."event_id" FROM "admins" 
LEFT JOIN "admins_events" ON "admins_events"."admin_id" = "admins"."admin_id"
LEFT JOIN "events" ON "events"."event_id" = "admins_events"."event_id"
WHERE (events.event_id IN (110) AND admins.admin_id IN (001))

目前,我得到的结果是

admin_id  event_id
-------------
001 110

我想要的地方

admin_id  event_id
-------------
001 110
001 220

即使我没有在 where-in 子句中传递它,我仍然必须显示与管理员相关的其他事件。我想每次都传递所有 event_id 并匹配强制性 event_id 并匹配剩余的 event_id,以防找到强制性 event_id。

SELECT "admins"."admin_id", "events"."event_id" FROM "admins" 
LEFT JOIN "admins_events" ON "admins_events"."admin_id" = "admins"."admin_id"
LEFT JOIN "events" ON "events"."event_id" = "admins_events"."event_id"
WHERE (events.event_id IN (mandatory[110], 220) AND admins.admin_id IN (001))

如何更改查询?

最佳答案

WHERE 子句中使用 EXISTS 添加另一个条件:

SELECT a.admin_id, e.event_id 
FROM Admins a
LEFT JOIN Admins_Events ae ON ae.admin_id = a.admin_id
LEFT JOIN Events e ON e.event_id = ae.event_id
WHERE (e.event_id IN (110, 220) AND a.admin_id IN (001))
AND EXISTS (
SELECT 1 FROM Admins_Events
WHERE event_id = 110 AND admin_id = a.admin_id
)

参见 demo .
结果:

| admin_id | event_id |
| -------- | -------- |
| 1 | 110 |
| 1 | 220 |

关于sql - “where-in”子句中的强制条件匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57372632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com