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

xa9qqrwz  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(266)

我找不到合适的题目,但我会尽力把我的问题解释清楚。
餐桌销售(每个餐厅以特定价格出售的啤酒、比萨饼等物品都有记录)

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号餐厅的啤酒也卖得便宜。
我的问题是,我们如何在上面这样的表上编写一个查询来验证这个约束。在这种情况下,我们应该得到'false'返回值,因为表违反了约束。

qxgroojn

qxgroojn1#

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

插入餐厅id!=一个项目会改变标准。

相关问题