它不是我正在寻找的减法。我知道它不是一个联合或交集...我已经获得了一个冗长而复杂的存储过程,它返回一个活动和非活动文档的表。我也得到了一个类似的存储过程,它返回另一个只包含活动文档的表。
如何使用这两个存储过程获取非活动文档表?
我们正在使用SQL Server 2005。
答案 0 :(得分:39)
您要查找的设置操作称为MINUS,但在SQL Server中,关键字为EXCEPT
SELECT ... // all documents
EXCEPT
SELECT ... // active documents
我相信EXCEPT设置操作在SQL Server 2005中可用。
答案 1 :(得分:11)
假设两个表中有唯一的ID对应:
select * from table_both b
where not exists (select * from table_active a where a.id = b.id)
答案 2 :(得分:8)
所有好的答案,但缺少一点:提问者(OP)有存储过程......
您必须定义临时表(基于您的平台)才能加载数据
INSERT ...
EXEC getActive
INSERT ...
EXEC getInactive
然后使用EXCEPT / EXISTS / MINUS / IN / OUTER JOIN / etc ......
答案 3 :(得分:6)
SELECT * FROM Table1
LEFT JOIN Table2 on Table1.id = Table2.id
WHERE Table2.id IS NULL
这几乎适用于任何数据库引擎
答案 4 :(得分:3)
select * from MyTable1
where MyTable1.Field1 not in (
select Field1 from MyTable2)
答案 5 :(得分:3)
我相信EXCEPT就是你要找的。语法类似于UNION或INTERSECT。
答案 6 :(得分:2)
答案 7 :(得分:2)
SELECT both.*
FROM both LEFT OTUER JOIN inactives USING (whatever_id)
WHERE inactives.whatever_id IS NULL;
或
SELECT * FROM both
EXCEPT
SELECT * FROM inactives;
答案 8 :(得分:1)
在MS TSql中,我认为您需要EXCEPT关键字。
query1 EXCEPT query2
将返回第一个查询中找到的所有行,这些行在第二个查询中也找不到。
答案 9 :(得分:1)
您也可以使用NOT IN
子句
例如,假设存储过程为您提供了名为@AllDocuments
和@ActiveDocuments
的表变量,并且每个文档都有一个名为DocId
的标识符列
SELECT * FROM @AllDocuments
WHERE DocId NOT IN
(SELECT DocId FROM @ActiveDocuments)
根据需要调整此选项以匹配您的表/列名称。
答案 10 :(得分:0)
SELECT roll_number FROM profile WHERE(catagory='Attest and Eat' or catagory='Live and Eat') and status='OK' EXCEPT SELECT roll_number from meal_status WHERE date='29' AND month='1'
您可以尝试使用此类命令从另一个表中减去一个表。
答案 11 :(得分:0)
为了在三个表之间进行减法,我使用了以下查询:
基本上我有三张桌子..表1,表2,表3。 首先,我完成了表1和表2的减法,然后在前一个查询的结果和表3之间进行了减法。
select v3.Material, ((v1.Qty-v2.Qty)-v3.Qty) as Quantity
from table1 v1, table2 v2, table3 v3
where (v1.Material=v2.Material
and v1.Material=v3.Material
and v2.Material=v3.Material)
答案 12 :(得分:0)
你可以使用第一个返回Active& amp;不活跃和 在WHERE cluse put document for document status = inactive,你只会获得非活动文件。
答案 13 :(得分:0)
如果您要减去一个百分比并更新表格,请使用此
$cart = get_post_meta( $post->ID, 'wcssc_cart_data' );
if ( !empty( $cart ) ) {
$cart = $cart[ 0 ];
}
foreach ( $cart as $cart_item_key => $cart_item ) {
$_product = apply_filters( 'woocommerce_cart_item_product', $cart_item\[ 'data'\ ], $cart_item, $cart_item_key );
$product_id = apply_filters( 'woocommerce_cart_item_product_id', $cart_item\[ 'product_id'\ ], $cart_item, $cart_item_key );
if ( $_product && $_product->exists() && $cart_item\[ 'quantity'\ ] > 0 && apply_filters( 'woocommerce_cart_item_visible', true, $cart_item, $cart_item_key ) ) {
$product_permalink = apply_filters( 'woocommerce_cart_item_permalink', $_product->is_visible() ? $_product->get_permalink( $cart_item ) : '', $cart_item, $cart_item_key );
///MY CODE START
$value1 = apply_filters( 'woocommerce_cart_item_subtotal',
WC()->cart->get_product_subtotal( $_product, $cart_item\[ 'quantity'\ ] ),
$cart_item, $cart_item_key );
$total_cart += $value1;
请注意(50/100)表示50%,因此在这种情况下,此查询将从行的总值中减去50%!