2014-10-27 42 views
0

让我们假设我有两张我想与其他人互相比较的订单表。比较另一个表中多行的行的值

orders { 
    id int, 
    price money 
} 

ordereditems { 
    orderid int, 
    itemid int, 
    price money 
} 

其中orders.id = ordereditems.orderid

当然,这是一个不好的设计,因为这两个表并不需要一个价格。但是,如何设计查询以查明订单中的哪些行具有价格,这与订购商品中价格列的总和不相符?

+0

尝试使用左连接上orders.id = ordereditems.orderid,做的比较或什么都计算u需要 – 2014-10-27 09:56:57

回答

1

如果我理解正确的:

SELECT * FROM orders o 
LEFT JOIN OrderedItems ei 
ON o.Price = ei.Price WHERE ei.Price is NULL 
+0

你没有,谢谢:) – Dave 2014-10-27 10:06:13

0
SELECT a.id, 
     a.price, 
     b.price, 
     CASE 
     WHEN a.price = b.price THEN 'PRICE MATCHED' 
     ELSE 'PRICE NOT MATCHED' 
     END AS RESULT 
FROM orders a 
     INNER JOIN ordereditems b 
       ON a.id = b.orderid 
        AND a.price IS NOT NULL 

--orders有一个价格,这与pricecolumn的ordereditems总和不匹配

SELECT a.id, 
     a.price, 
     b.total_price, 
     CASE 
     WHEN a.price = b.total_price THEN 'PRICE MATCHED' 
     ELSE 'PRICE NOT MATCHED' 
     END AS RESULT 
FROM orders a 
     INNER JOIN (SELECT orderid, 
          Sum(price) AS total_price 
        FROM ordereditems 
        GROUP BY orderid) b 
       ON a.id = b.orderid 
        AND a.price IS NOT NULL 
+0

这是行之有效的,只要每个订单只有一个订单项。如果一个订单包含两个项目,则不起作用:( – Dave 2014-10-27 10:16:33

+0

计算OrderedItems表中所有项目的价格,USE GROUPBY – knkarthick24 2014-10-27 10:20:13

+0

检查编辑后的代码。 – knkarthick24 2014-10-27 10:25:47

0

总结值的最简单方法从两栏选择现有的一栏:

SELECT SUM(COALESCE(o.price, oi.price)) as price -- reorder columns for prefer 
FROM orders o INNER JOIN -- if you are missing some rows use FULL JOIN 
ordereditems oi ON oi.id = o.id 
0

您还可以使用下面的查询来获取订单ID与不匹配的价格

SELECT o.id,MAX(o.price) AS price 
FROM orders o 
INNER JOIN ordereditems oi 
ON o.id=oi.orderid 
GROUP BY o.id 
HAVING SUM(oi.price)<>MAX(o.price) 
相关问题