SQL-需要多行才能复制

SQL-需要多行才能复制,sql,oracle,oracle-sqldeveloper,Sql,Oracle,Oracle Sqldeveloper,由于值“10”是重复的,因此我只返回6行数据,而不是所需的7行数据。我需要返回“10”、“20”、“30”、“40”、“50”、“60”、“10”中每个值的结果 如何为值“10”获取2行数据,而不是仅获取1行数据?虽然看起来不太实际,但这正是我需要做的。非常感谢您的帮助 可以使用UNION ALL合并多个查询 SELECT COLUMN_A, COLUMN_B, COLUMN_C FROM MY_TABLE WHERE SOMETHING IN ('10', '20', '30', '40',

由于值“10”是重复的,因此我只返回6行数据,而不是所需的7行数据。我需要返回“10”、“20”、“30”、“40”、“50”、“60”、“10”中每个值的结果

如何为值“10”获取2行数据,而不是仅获取1行数据?虽然看起来不太实际,但这正是我需要做的。非常感谢您的帮助

可以使用UNION ALL合并多个查询

SELECT COLUMN_A, COLUMN_B, COLUMN_C
FROM MY_TABLE
WHERE SOMETHING IN ('10', '20', '30', '40', '50', '60', '10');
无论如何,我不清楚你为什么需要这个。此外,就数据库负载和性能而言,它不是非常有效,即使您对某些内容有索引。

您可以使用UNION ALL来合并多个查询

SELECT COLUMN_A, COLUMN_B, COLUMN_C
FROM MY_TABLE
WHERE SOMETHING IN ('10', '20', '30', '40', '50', '60', '10');
无论如何,我不清楚你为什么需要这个。此外,就数据库负载和性能而言,它不是非常有效,即使您对某些内容有索引。

您可以使用UNION,如下所示:

或者,您可以创建一个带有筛选值的临时表并将其联接:

SELECT COLUMN_A,
       COLUMN_B,
       COLUMN_C
       FROM MY_TABLE
       WHERE SOMETHING IN ('10',
                           ...
                           '60')
UNION ALL
SELECT COLUMN_A,
       COLUMN_B,
       COLUMN_C
       FROM MY_TABLE
       WHERE SOMETHING IN ('10');
您可以使用UNION,如下所示:

或者,您可以创建一个带有筛选值的临时表并将其联接:

SELECT COLUMN_A,
       COLUMN_B,
       COLUMN_C
       FROM MY_TABLE
       WHERE SOMETHING IN ('10',
                           ...
                           '60')
UNION ALL
SELECT COLUMN_A,
       COLUMN_B,
       COLUMN_C
       FROM MY_TABLE
       WHERE SOMETHING IN ('10');

你可以这样做

字符串被转换为嵌套表查询,然后根据该查询进行连接

CREATE GLOBAL TEMPORARY TABLE SOMETHINGS
AS
SELECT '10' SOMETHING
       FROM DUAL
UNION ALL
...
UNION ALL
SELECT '10' SOMETHING
       FROM DUAL;

SELECT COLUMN_A,
       COLUMN_B,
       COLUMN_C
       FROM MY_TABLE
            INNER JOIN SOMETHINGS
                       ON SOMETHINGS.SOMETHING = MY_TABLE.SOMETHING;

DROP TABLE SOMETHINGS;

你可以这样做

字符串被转换为嵌套表查询,然后根据该查询进行连接

CREATE GLOBAL TEMPORARY TABLE SOMETHINGS
AS
SELECT '10' SOMETHING
       FROM DUAL
UNION ALL
...
UNION ALL
SELECT '10' SOMETHING
       FROM DUAL;

SELECT COLUMN_A,
       COLUMN_B,
       COLUMN_C
       FROM MY_TABLE
            INNER JOIN SOMETHINGS
                       ON SOMETHINGS.SOMETHING = MY_TABLE.SOMETHING;

DROP TABLE SOMETHINGS;

您可以使用join来实现这一点。首先将in子句中以逗号分隔的值拆分为表形式,并对表使用join

拆分函数可以使用MSDN 下面的示例代码:我使用CTE方法进行拆分

SELECT *
FROM
(
select
  trim(regexp_substr(t.MESSAGES, '[^,]+', 1, levels.column_value))  as SPLIT_MESSAGE
from 
  (SELECT '10, 20, 30, 40, 50, 60, 10' MESSAGES FROM DUAL) t,
  table(cast(multiset(select level from dual connect by  level <= length (regexp_replace(t.MESSAGES, '[^,]+'))  + 1) as sys.OdciNumberList)) levels
) A
    INNER JOIN MY_TABLE ON MY_TABLE.SOMETHING=A.SPLIT_MESSAGE

您可以使用join来实现这一点。首先将in子句中以逗号分隔的值拆分为表形式,并对表使用join

拆分函数可以使用MSDN 下面的示例代码:我使用CTE方法进行拆分

SELECT *
FROM
(
select
  trim(regexp_substr(t.MESSAGES, '[^,]+', 1, levels.column_value))  as SPLIT_MESSAGE
from 
  (SELECT '10, 20, 30, 40, 50, 60, 10' MESSAGES FROM DUAL) t,
  table(cast(multiset(select level from dual connect by  level <= length (regexp_replace(t.MESSAGES, '[^,]+'))  + 1) as sys.OdciNumberList)) levels
) A
    INNER JOIN MY_TABLE ON MY_TABLE.SOMETHING=A.SPLIT_MESSAGE

你能发布一些样本数据吗?更容易理解问题并为您提供解决方案。中不需要另一个值“10”。只要满足条件,行将被删除returned@mad_我需要在结果集中为值“10”设置2行数据。我确实意识到我可以导出到excel并将所需数据复制到新行中。我自己复制它,但我正在处理超过10000行的数据。如果您想创建一个副本,而值为10,则正如建议的那样,Union似乎是唯一的选项您可以发布一些示例数据吗?更容易理解问题并为您提供解决方案。中不需要另一个值“10”。只要满足条件,行将被删除returned@mad_我需要在结果集中为值“10”设置2行数据。我确实意识到我可以导出到excel并将所需数据复制到一个新行中。我自己复制它,但我正在处理超过10000行的数据。您想要创建一个副本,而as值为10时还没有出现,那么建议的Union似乎是唯一的选项