Oracle 在where条件下查询同一输入数据的单个表的所有列

Oracle 在where条件下查询同一输入数据的单个表的所有列,oracle,oracle10g,Oracle,Oracle10g,如果我们想根据单个列上的条件获取信息,我们可以这样做 SELECT * FROM contact WHERE firstName = 'james' 如果我们想在多个列上设置条件,我们可以这样做 SELECT * FROM contact WHERE firstName = 'james' OR lastName = 'james' OR businessName = 'james' 但是如果我们有50多列呢 除了带或关键字的WHERE条件外,还有更好的方法吗? 该方法不应涉及写入所有列名

如果我们想根据单个列上的条件获取信息,我们可以这样做

SELECT * FROM contact WHERE firstName = 'james'
如果我们想在多个列上设置条件,我们可以这样做

SELECT * FROM contact WHERE firstName = 'james' OR lastName = 'james' OR businessName = 'james'
但是如果我们有50多列呢

除了带或关键字的WHERE条件外,还有更好的方法吗? 该方法不应涉及写入所有列名


在MySql as中有一种方法可以做到这一点。

您无法避免写入所有列名

但您可以使用IN条件使书写时间缩短一点:

SELECT * 
FROM contact 
WHERE 'james' in (firstName, lastName, businessName)

如果要搜索所有VARCHAR2列,则以下脚本应该会有所帮助:

set pages 0;
set lines 200

select case when rn = 1 and rn_desc = 1 then 'select * from '||table_name||' where '||column_name||' = ''james'';'
            when rn = 1 then 'select * from '||table_name||' where '||column_name||' = ''james'''
            when rn_desc = 1 then '    and '||column_name||' = ''james'';'
            else '    and '||column_name||' = ''james'''
       end sql_stmt
from   (select table_name,
               column_name,
               column_id,
               row_number() over (partition by table_name order by column_id) rn,
               row_number() over (partition by table_name order by column_id desc) rn_desc 
        from   user_tab_columns
        where  data_type in ('VARCHAR2')
        -- and   table_name in (<list of tables>) -- uncomment and amend as appropriate!
       )
order by table_name, column_id;
如果您只想搜索特定的表,那么必须为您要搜索的表名称添加一个过滤器


将上述内容作为脚本运行将得到一个包含多个查询的脚本,然后您可以运行该脚本

No;如果要搜索50列,则必须指定这50列。甲骨文还没有通灵呢@博内斯特明白了。我转述了一个错误的问题。所有列的情况如何?是否使用带有列编辑模式的文本编辑器?这使得使用重复文本构造查询非常简单。@DavidAldridge,目前我正在这样做。我需要为许多桌子做这个。所以我试图找到更好的方法,但我发现这是不可能的。您可以随时使用SQL来帮助您生成查询?每个表中要查询的所有列是否都相同?或者您想检查的都是字符串字段,等等?用户选项卡列将帮助您选择表的所有列;然后,您可以使用它来编写查询,过滤掉表的相关列,例如string columnsI很害怕这一点,但我认为这在MySql中是可能的。它可能在甲骨文中。我在问题中共享了一个URL。@TusharBhaware:这个答案不正确。这里显示的语法是针对SQL Server的,而不是针对MySQL的。但是大多数SQL客户端都允许您轻松地从弹出窗口或类似的窗口中选择列是的。我从SQL客户机中选择所有列,然后在查询中使用它们,但在几个表之后,我已经厌倦了这样做。我需要在很多桌子上做这个,所以我想找到一个聪明的解决方案,而不是做这种卑微的工作。这非常有效。非常感谢你。你帮我省了很多工作。