我无法获得要求的适当标题,但我会尽力解释我的问题。
表出售(每个餐厅以特定价格出售的记录,例如啤酒,比萨饼等)
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中的销售价格则便宜。
我的问题是,我们如何编写查询以验证上述表上的此约束。在这种情况下,由于表违反约束,我们应该获得“假”返回值。
答案 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项将颠倒条件。