首页 > 解决方案 > mysql:将同一列中的值与其他值进行比较

问题描述

我无法获得正确的提问标题,但我会尽力很好地解释我的问题。

表卖(这有每个餐厅以特定价格出售的啤酒、比萨等物品的记录)

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

约束:对于任意两个物品A和B,在所有餐厅中,物品A的售价应低于B或高于B的价格。与所有其他餐厅相比,我们不能出现特定餐厅项目 A 比项目 B 便宜的情况。

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

我的问题是,我们如何编写查询来验证对上述表的此约束。在这种情况下,我们应该得到 'False' 返回值,因为表违反了约束。

标签: mysql

解决方案


假设反资本主义标准是餐厅 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 项将反转标准。


推荐阅读