mysql - 获取所有产品,并将特定订单的产品放在前面

标签 mysql sql join

我有 3 个表:产品订单orderLines(order_id、product_id)。

我有一个 SQL 查询来找出在仅一个查询中几乎不可能完成的操作。
有没有一种方法可以只包含一个查询:

  • 所有产品,但首先显示特定订单的产品; 这意味着:对于 order A:首先显示 product1product2.. 出现在 orderA 的 orderLines 中,然后接下来显示以下产品(未订购)。

PS: 我知道可以通过两个查询的联合来实现这一点,但最好仅在一个查询中完成。

最佳答案

您可以在 order by 子句中放置子查询。在这种情况下,您需要一个 exists 子查询:

select p.*
from products p
order by (exists (select 1
                  from orderlines ol
                  where p.productid = ol.productid and o.orderid = ORDERA
                 )
         ) desc;

关于mysql - 获取所有产品,并将特定订单的产品放在前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26956901/

相关文章:

php - 如果之前不存在则插入新记录,否则更新它。也不要针对特定​​条件插入超过 N 条记录

sql - 在 SQL Server 2008 中解析 xml 时在 sql 表中获取 NULL

html - 在 HTML 中正确显示存储在数据库中的带有标记的文本

MySQL - 如何将具有多个相关子查询的查询优化为独立子查询?

MySQL 合并列

sql-server - 带有 where 子句的内连接索引

mysql - 如何使用sql从具有不同列的两个表中获取不同的记录

MySQL 计数性能

php - 循环出mysql数据

mysql - 加速 MySQL 查询/290 万行/多个连接