繁体   English   中英

如何在SQL查询中对LEFT JOIN(多个表)的顺序进行排序?

[英]how to sort order of LEFT JOIN (multiple tables) in SQL query?

发现了一个帖子非常类似的帖子,我以后。 如何在SQL查询中排序LEFT JOIN的顺序? 但我的分散在几张桌子上。

Accounts
acc_id | salesRank | reg_date
1      | 50        | 2018-01-01 07:01:01
2      | 20        | 2019-02-01 07:01:01

Catalogue
cat_id | product_name | brand   
1      | torch        | Dewalt  
2      | MacBook      | Apple  
3      | Phone        | Samsung

Inventory
inv_id | cat_id | acc_id | salePrice | stock
1      | 1      | 1      | 999       | 6
2      | 1      | 2      | 499       | 2

继续我所拥有的东西:

 SELECT c.cat_id, c.product_name, c.brand, a.salePrice,
 MATCH(c.product_name) AGAINST('+dewalt' IN BOOLEAN MODE) AS relevancy, 
 (a.salesRank + i.stock) AS sellersRankTotal 
 FROM catalogue AS c
JOIN inventory AS i ON c.cat_id = i.cat_id
JOIN accounts AS a ON i.acc_id = a.acc_id

WHERE ... GROUP BY c.cat_id ORDER BY relevancy DESC

我有些人需要从2个表中的2个值中得到MAX()sellersRank。

我之后的结果是排名最高的卖家(salesrank + stock)获得搜索结果中显示的价格。

 product_name | brand  | acc_id | cat_id | price | sellersRankTotal
 torch        | Dewalt | 1      | 1      | 999   | 56 (SalesRank + Stock)

我只能假设亚马逊有类似的概念。 显示的价格并不总是最便宜的,但具有一定程度排名的卖家的价格显示在其列表中。

希望这是有道理的,问候

听起来你只是想要以不同的方式控制排序顺序,尽管我不是100%确定你是否意味着卖家的总数和相关性以某种方式结合起来。 你有多少源表并不重要。 如果它们以新关系连接在一起,则可以按该结果集的任何列(或可用于创建计算列的任何表达式)进行排序。

如果您只想通过“a.salesRank + i.stock”(表达式给出“sellersRankTotal”的别名)来订购,那么只需添加order by子句(假设您要先按相关性排序,然后按sellersRankTotal):

SELECT c.cat_id, c.product_name, c.brand, a.salePrice,
MATCH(c.product_name) AGAINST('+dewalt' IN BOOLEAN MODE) AS relevancy, 
(a.salesRank + i.stock) AS sellersRankTotal 
FROM catalogue AS c
JOIN inventory AS i ON c.cat_id = i.cat_id
JOIN accounts AS a ON i.acc_id = a.acc_id

WHERE ... GROUP BY c.cat_id ORDER BY relevancy DESC, sellersRankTotal DESC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM