2013-06-29 70 views
0

我有一張價格信息表如下圖所示,即時試圖查詢數據庫,讓我回到'項目'和最便宜的供應商值。查找數據庫的每一行的最低值-sql

data base values

因此,對於在它下面的表將是

  • 自行車,供應商3 - 120.43
  • 鞋,供應商2 - 19.99
  • 球,供應商1 - 5.50

這是可能做與SQL查詢,或者你需要輸出所有的值和然後用php(或選擇的語言)過濾它們?

+3

這是一個糟糕的模式來做你想做的事情。如果有一千個供應商呢? – wallyk

+1

https://en.wikipedia.org/wiki/Database_normalization –

+1

正如Wallyk所說,這不是一個好的模式設計。突圍供應商到另一個表。然後你有一個產品表。你有一個定價表,它有產品和供應商的外鍵 – bryanmac

回答

6

使用LEAST()

select item, least(supplier1, supplier2, supplier3) 
from your_table 
+0

SQLite是否支持LEAST()? –

+1

似乎並不如此。見[這裏](http://sqlfiddle.com/#!7/d41d8/352) –

+0

也許有一個等同物,只是名稱不同而已。我找不到一個。 –

1

更改您的架構。

suppliers

supplier_id supplier_name 
1    Supplier 1 
2    Supplier 2 
3    Supplier 3 

products

product_id  product_name 
1    Bike 
2    Shoe 
3    Ball 

prices

product_id  supplier_id  price 
1    1    125.65 
1    2    132.01 
1    3    120.43 
2    1    23.99 
2    2    19.99 
2    3    25.96 
3    1    5.50 
3    2    8.65 
3    3    6.50 

您的查詢

SELECT product_name, supplier_name, price 
FROM prices 
INNER JOIN products ON products.product_id = prices.product_id 
INNER JOIN suppliers ON suppliers.supplier_id = prices.supplier_id 
GROUP BY prices.product_id 
HAVING price = MIN(prices.price) 
相關問題