【问题标题】:Fetching one column values with multiple conditions获取具有多个条件的一列值
【发布时间】:2017-12-20 22:29:14
【问题描述】:

我需要获取仅使用一个用户名的活动用户的域 ID,该用户名应以“a-%”或“A-%”开头,并且所有其他用户名应为 system_id 349 的“禁用”,如下所示图片,

预期结果:

我使用的查询是:

SELECT * FROM
    (SELECT DISTINCT  p.domain_id
        FROM  ur_username u
            JOIN ur_username_person up ON u.username_id = up.username_id
            JOIN ur_person p ON up.person_id = p.person_id
            JOIN ur_system s ON u.system_id = s.system_id
          WHERE ( u.username LIKE 'A-%' OR username LIKE 'a-%') AND u.status = 'ACTIVE' AND u.system_id = 34)E
WHERE  E.domain_id IN  (SELECT  p.domain_id FROM ur_username u JOIN ur_username_person up ON u.username_id = up.username_id
    JOIN ur_person p ON up.person_id = p.person_id
  WHERE  u.system_id = 349 AND u.status = 'DISABLED')

例如 Pri_0911 (domain_id) 有多个用户名,但他是活动的,只有用户名以 'a-%' 开头,所有其他用户名都被禁用。所以我们需要选择与此条件匹配的域 id。

domain_id  | username    | status    |   system_id   |  
Pri_0911   | asdfg       | disabled  |      349      |
Pri_0911   | werdfdf     | disabled  |      349      |
Pri_0911   | zxgfg       | disabled  |      349      |
Pri_0911   | a-priya     | ACTIVE    |      349      |

【问题讨论】:

  • (U.USERNAME LIKE 'A-%' or USERNAME LIKE 'a-%') 在括号中。否则你说的是 U.USERNAME LIKE 'A-%' OR blablabla
  • @MiloBellano 我改变了提到的点,但在这里仍然没有得到预期的结果。谢谢
  • 你得到的输出是什么?
  • 表的 ddl 也有助于更好地理解查询中的连接。如果一个用户名 a-% 只是处于活动状态而从未发生过它被禁用怎么办?我猜在你的查询中你会跳过它们
  • 您应该编辑您的问题以包含额外信息

标签: sql oracle oracle9i


【解决方案1】:

如果我正确理解了您的最新要求,以下内容不是为您提供了您所追求的吗?

SELECT DISTINCT p.domain_id,
                u.username
FROM   ur_username u
       JOIN ur_username_person up ON u.username_id = up.username_id
       JOIN ur_person p ON up.person_id = p.person_id
       JOIN ur_system s ON u.system_id = s.system_id
WHERE  u.username LIKE 'A-%'
OR     u.username LIKE 'a-%';

【讨论】:

  • @这里我们有一个转折点是域 id 对于某些用户名是有效的,但是,我需要只有一个以“A-%”或“a-”开头的活动用户的域对于系统 id 349。这就是我使用两个子查询的原因。 T
  • 为了避免我们猜测您的要求,为什么不向我们提供完整的测试用例。例如根据此输入数据创建表语句、插入语句和预期结果。如果您向我们提供这些信息,您的要求将会更加清晰。
  • 这里没有创建或插入语句我正在尝试提取仅在一个用户帐户中处于活动状态的域 ID 的报告(以 a- 开头)。必须禁用所有其他用户帐户。我的查询被拉取数据,但它还拉取在另一个用户名中处于活动状态的域 ID。这里涉及到三个表 ur_username(Username details) , ur_person(domain_id)。 ur_username_person(连接表)。这是我 cab 必须选择数据的信息。抱歉在此浪费您的时间
  • 问题是,我们看不到您的数据库或您的数据。我们不知道您的表由什么组成,它们是如何定义的(主键、外键、其他约束、索引等)。因此,为了帮助我们能够帮助您,您必须提供一些示例数据。我们不关心这些数据是什么,只要它证明了您要解决的问题。请参阅this 作为一个足够体面的问题的示例。看看您是否可以更新您的问题以提供更完整的图片。
猜你喜欢
  • 2019-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-30
  • 1970-01-01
  • 1970-01-01
  • 2021-10-12
相关资源
最近更新 更多