簡體   English   中英

mysql:將同一列的值與其他值進行比較

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM