SQL-需要多行才能复制
由于值“10”是重复的,因此我只返回6行数据,而不是所需的7行数据。我需要返回“10”、“20”、“30”、“40”、“50”、“60”、“10”中每个值的结果 如何为值“10”获取2行数据,而不是仅获取1行数据?虽然看起来不太实际,但这正是我需要做的。非常感谢您的帮助 可以使用UNION ALL合并多个查询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',
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似乎是唯一的选项