SQL:加入 LIKE 和 min()

SQL: Join with LIKE and min()

我正在使用下面的查询来获取与 LIKE 匹配的价格最低的行。

Suppliers
id | name           
----------------------------------------
1  | sup1    
2  | sup2  

Prices
id | article_number | price | supplier_id  
------------------------------------------------
1  | 12345678       | 312  | 1
2  | 12345678       | 219  | 2
3  | 87654321       | 312  | 1


select prices.* from prices
inner join
( 
  select min(price) as price, 
  article_number as article_number from prices group by article_number
) 
min_prices on prices.price = min_prices.price 
and prices.article_number = min_prices.article_number 

WHERE prices.article_number LIKE '".$q."%'

虽然现在也想从供应商那里获取suppliers.name-table:

select prices.*, suppliers.name from prices, suppliers 
inner join
( 
  select min(price) as price, 
  prices.article_number as article_number from prices group by prices.article_number
) 
min_prices on price = min_prices.price 
and article_number = min_prices.article_number 

WHERE 
        prices.article_number LIKE '".$q."%' AND
        prices.supplier_id = suppliers.id" 

这 returns 行数的 18 倍……?

而且table由10+百万行组成,所以效率很重要。

为了性能,在article_number上添加索引,在子查询中使用prices.article_number LIKE '".$q."%'。您最好使用 JOIN 而不是 , (这是旧方法)来组合两个表。像这样:

select prices.*, suppliers.name
from prices
inner join ( 
  select min(price) as price, prices.article_number as article_number
  from prices
  where prices.article_number like '".$q."%'
  group by prices.article_number
) min_prices
on price = min_prices.price 
and article_number = min_prices.article_number
inner join suppliers
on prices.supplier_id = suppliers.id
where prices.article_number like '".$q."%'