[英]mysql: compare value from same column with other values
我無法為這個問題找到合適的標題,但我會盡力很好地解釋我的問題。
表銷售(這記錄了每家餐廳以特定價格出售的啤酒,比薩等物品)
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,而在餐廳 1 的售價則更便宜。
我的問題是,我們如何編寫查詢來驗證上述表上的此約束。 在這種情況下,我們應該得到 'False' 返回值,因為表違反了約束。
假設反資本主義標准是餐廳 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 項會顛倒條件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.