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 中一组条件的查询数据的主要内容,如果未能解决你的问题,请参考以下文章