SELECT Oracle 中一组条件的查询数据

Posted

技术标签:

【中文标题】SELECT Oracle 中一组条件的查询数据【英文标题】:QUERY Data for array of set of Conditions in SELECT Oracle 【发布时间】:2021-04-12 02:16:58 【问题描述】:

我有一个类似这样的查询

列集: user_id , user_details,date

我有一组条件值,例如: 1 , AAA , 09-03-2021 , 2 , BBB , 08-02-2021

我正在尝试在同一选择查询中添加条件,因为我需要同时获取数据,

已尝试以下查询

SELECT * FROM USERS WHERE (user_id, user_details, date) in (select 1, AAA, 09-03-2021 from dual);

上面的工作正常,当我使用下面的时候,我无法获取数据,如果有任何规定可以获取所有条件集的数据,请问有人可以吗?

SELECT * FROM USERS WHERE (user_id, user_details, date) in ((select 1, AAA, 09-03-2021 from dual), (select 2, BBB, 08-02-2021 from dual));

【问题讨论】:

“一组条件”?你在说什么“条件”?您所描述的是值的元组-在某些情况下称为“记录”,在数据库中它们通常称为“行”(尽管您的表可能有其他列)。无论如何,最通用和正确的术语是“元组”——它们肯定是由“值”组成的,而不是“条件”。而且它们绝对不是任何东西的“数组”。 @user13922012 如果你仔细阅读SQL tag wiki,你会发现:2.提供适当的样本数据。或How do I ask a good question?:帮助他人重现问题。这里不是为了好玩,而是为了节省回答者的时间:当你跳过这些细节时,需要更多的时间来写一个好的和完整的工作答案。 【参考方案1】:

您使用了错误的语法,即使是要比较的单个元组也是如此。这两种情况应该是这样的:

where (user_id, user_details, date) in ( (1 , 'AAA' , to_date('09-03-2021')) )

where (user_id, user_details, date) in ( (1 , 'AAA' , to_date('09-03-2021')), 
                                         (2 , 'BBB' , to_date('08-02-2021')) ) 

无需从IN 列表中的DUAL 中选择任何内容。 IN 条件可以在右侧的值来自表时使用(在这种情况下,您将从该表中选择三列,而不是从 DUAL),但是这不是您在这里使用的 - 在这里您使用的是硬编码值,并且语法不需要 IN 列表中的 SELECT

请注意,在您的问题中,您使用 1, AAA, 09-03-2021 之类的值。我希望你知道这是错误的。 1 很好,它是一个数字。没有用单引号括起来的AAA 不是字符串 - 它将被解释为列名,并且会抛出错误,因为您的表没有名为AAA 的列。 09-03-2021 被视为一个简单的算术表达式,涉及三个数字,它们之间有减号(减法)。如果这让你感到困惑,那就是个大问题。

【讨论】:

感谢@mathguy,它有效,关于数据和字符串的表示,我已经将其作为示例进行了解释,而实际情况不同,因此下意识地错过了引号和 t0_date 函数

以上是关于SELECT Oracle 中一组条件的查询数据的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库:select基本语法条件查询

oracle 取重复数据中一条

oracle查询重复数据

ORACLE查询条件为空,则跳过该条件。

oracle数据库里面,在下面的select语句中,我需要增加一个条件为只查询3天内的记录。该如何编写,求教育

oracle数据库如何按多个条件查询数据。