我正在尝试编写一个查询,该查询返回表中具有IN子句的两个值且它们共享相同顺序的所有行#
例如我有
SELECT order_num, order_type
FROM order_table
WHERE order_type IN ('update','create')
AND order_num('1234');
这与1234
作为the order num
的单个输入一起工作,我正在努力编写一个不需要输入但返回具有更新和创建所有订单的查询。
我试图在同一张表上写一个子查询,但是不确定这是否是最佳实践。
答案 0 :(得分:4)
我认为您需要使用having
子句分组
SELECT order_num
FROM order_table
WHERE order_type IN ('update','create')
GROUP BY order_num
HAVING count(distinct order_type)=2
答案 1 :(得分:0)
另一种方法是,对于“创建”集一次加入order_table,对于“更新”集一次加入,然后将它们加入。
假设您的创建内容中没有c,而更新则...
SELECT a.order_num, a.order_type, b.order_num, b.order_type
FROM order_table a
INNER JOIN order_table b
on a.order_num &'c' = B.order_num
and a.order_Type ='create'
and b.order_Type ='update'
在创建类型时,基于函数的基于order-num的索引,如果有问题,基于order_type / Order_num的索引可能会有助于提高性能。
答案 2 :(得分:0)
我认为最简单的就是使用EXISTS:
SELECT
RTRIM(OUTT.ORDER_NUM, 'c'),
OUTT.ORDER_TYPE
FROM
ORDER_TABLE OUTT
WHERE
OUTT.ORDER_TYPE = 'update'
AND OUTT.ORDER_NUM IN (
'1234'
)
AND EXISTS (
SELECT
1
FROM
ORDER_TABLE INN
WHERE
RTRIM(OUTT.ORDER_NUM, 'c') = RTRIM(INN.ORDER_NUM, 'c')
AND INN.ORDER_TYPE = 'create'
);