gpt4 book ai didi

mysql - SQL Order By 通过连接表

转载 作者:太空宇宙 更新时间:2023-11-03 11:28:33 24 4
gpt4 key购买 nike

我有一个简单的一对多相关产品设置。我的数据库有两个表:

product 表包含 id, name 列和连接表 product_assignments 包含 product_id, related_id, order 列.

我需要获取所有相关产品,按顺序列排序

SELECT * FROM `products` LEFT JOIN
`related_assignments` `ra` ON `products`.`id` =
`ra`.`product_id` WHERE `id` IN (412, 1663, 1928) ORDER BY
`ra`.`order` DESC

我没有看到任何错误,我得到了所有三个记录(412、1663、1928),但按它们的 ID 排序,而不是按订单字段排序。

如何使用一个 SQL 请求对它们进行排序?

产品

+------+-------+
| id | name |
+------+-------+
| 412 | Watch |
| 1663 | Book |
| 1928 | Phone |
| 2000 | Cup |
+------+-------+

相关

+------------+------------+-------+
| product_id | related_id | order |
+------------+------------+-------+
| 2000 | 412 | 1 |
| 2000 | 1663 | 2 |
| 2000 | 1928 | 0 |
+------------+------------+-------+

最佳答案

根据您的示例数据和预期结果,您似乎需要使用 ra.related_id 作为连接条件而不是 ra.product_id

当您在 products.id =ra.product_id 上使用 Left join 时,它只会返回 id = 2000 行数据。但是你的 where 子句使用 id IN (412, 1663, 1928),这将使 ra.order 全部为 null,因此 order by ra.order 不会做任何事情。

create table products(
id int,
name varchar(50)
);



insert into products values ( 412, 'Watch');
insert into products values (1663, 'Book ');
insert into products values (1928, 'Phone');
insert into products values (2000, 'Cup ');


create table Related(
product_id int,
related_id int,
`order` int
);

insert into Related values (2000, 412 ,1 );
insert into Related values (2000, 1663 ,2 );
insert into Related values (2000, 1928 ,0 );

查询 1:

SELECT * 
FROM `products` LEFT JOIN
`Related` `ra` ON `products`.`id` =
`ra`.`related_id`
WHERE `id` IN (412, 1663, 1928)
ORDER BY `ra`.`order` DESC

Results :

|   id |  name | product_id | related_id | order |
|------|-------|------------|------------|-------|
| 1663 | Book | 2000 | 1663 | 2 |
| 412 | Watch | 2000 | 412 | 1 |
| 1928 | Phone | 2000 | 1928 | 0 |

关于mysql - SQL Order By 通过连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51994313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com