mysql:比较同一列中的值与其他值

时间:2018-10-27 21:48:07

标签: mysql

我无法获得要求的适当标题,但我会尽力解释我的问题。

表出售(每个餐厅以特定价格出售的记录,例如啤酒,比萨饼等)

restaurantID | item_name | price
----------------------------------
1              beer1        4 
1              beer2        5
2              beer1        7
2              beer2        6

约束: 对于任何两个项目,例如A和B,在所有餐厅中,项目A的售价都应低于价值B或高于价值B。我们不可能出现这样的情况,即与其他所有餐厅相比,餐厅A的商品特别是商品B的便宜。

在上面的示例中,啤酒1在餐厅2中的销售价格比啤酒2高,而啤酒2在餐厅1中的销售价格则便宜。

我的问题是,我们如何编写查询以验证上述表上的此约束。在这种情况下,由于表违反约束,我们应该获得“假”返回值。

1 个答案:

答案 0 :(得分:0)

假设反​​资本主义标准是餐厅1最便宜:

您可以使用以下方法验证表的内容:

SELECT A.*, B.*  
FROM sells A
JOIN sells B
  ON A.item_name=B.item_name
WHERE
  A.price < B.price AND
  A.restaurant_ID != 1

此选项选择餐馆1最便宜的所有商品。

您不能轻松地编写表约束。但是,在插入新产品时,我们可以确保仅在价格便宜时才插入它:

因此,插入餐厅1件物品:

INSERT INTO sells
SELECT 1,"beer3",8
FROM sells A
LEFT JOIN sells B
  ON A.item_name=B.item_name AND
  B.item_name = "beer3" AND
  B.price < 8 AND
  B.restaurant_ID != 1
WHERE
  B.restaurant_ID IS NULL
LIMIT 1

插入restaurant_ID!= 1项将颠倒条件。