当有多个逗号分隔的外键时如何加入左侧
How to join left while there are more than one foreign key of comma seperated
我有以下两个 tables(订单和 psettings):
我想加入订单 table,还有 psettings table。当 product_id 在 Order table 中只有一个时有效。我的查询是:
SELECT `Order`.*, `products`.*, `psettings`.*, `City`.`name`, `Location`.`name` FROM `amrajegeachi`.`orders` AS `Order` LEFT JOIN `amrajegeachi`.`cities` AS `City` ON (`Order`.`city_id` = `City`.`id`) LEFT JOIN `amrajegeachi`.`locations` AS `Location` ON (`Order`.`location_id` = `Location`.`id`) LEFT JOIN `products` ON `Order`.`product_id` = `products`.`id` LEFT JOIN `psettings` ON `Order`.`product_id` = `psettings`.`product_id` WHERE `status` = 'No contact'
如何对订单 table 中的多个逗号分隔 product_id 执行相同的任务?
N.B:还有两个左连接关系table:'cities'和'locations'。
你做不到,因为你的数据库设计有问题。人们应该避免在一个字段中存储多个东西:一开始这似乎是一个明智的决定,但它不可避免地会让你的生活变得困难。
设计此数据模型的正确方法是为 product_id
制作一个单独的 table,如下所示:
create table order_product (
order_id int not null
, product_id int not null
)
这个 table 在您的场景中看起来像这样:
order_id product_id
-------- ----------
1 1
2 1
3 1
4 1
4 2
4 3
现在您可以使用 order_product
来制定联接,确保联接也适用于多产品订单:
SELECT `Order`.*, `products`.*, `psettings`.*, `City`.`name`, `Location`.`name`
FROM `amrajegeachi`.`orders` AS `Order`
LEFT JOIN `amrajegeachi`.`cities` AS `City` ON (`Order`.`city_id` = `City`.`id`)
LEFT JOIN `amrajegeachi`.`locations` AS `Location` ON (`Order`.`location_id` = `Location`.`id`)
-- This line takes care of dealing with multiple orders:
LEFT JOIN order_product ON `Order`.id=order_product.order_id
LEFT JOIN `products` ON order_product.product_id = `products`.`id`
LEFT JOIN `psettings` ON `Order`.`product_id` = `psettings`.`product_id`
WHERE `status` = 'No contact'
我有以下两个 tables(订单和 psettings):
我想加入订单 table,还有 psettings table。当 product_id 在 Order table 中只有一个时有效。我的查询是:
SELECT `Order`.*, `products`.*, `psettings`.*, `City`.`name`, `Location`.`name` FROM `amrajegeachi`.`orders` AS `Order` LEFT JOIN `amrajegeachi`.`cities` AS `City` ON (`Order`.`city_id` = `City`.`id`) LEFT JOIN `amrajegeachi`.`locations` AS `Location` ON (`Order`.`location_id` = `Location`.`id`) LEFT JOIN `products` ON `Order`.`product_id` = `products`.`id` LEFT JOIN `psettings` ON `Order`.`product_id` = `psettings`.`product_id` WHERE `status` = 'No contact'
如何对订单 table 中的多个逗号分隔 product_id 执行相同的任务?
N.B:还有两个左连接关系table:'cities'和'locations'。
你做不到,因为你的数据库设计有问题。人们应该避免在一个字段中存储多个东西:一开始这似乎是一个明智的决定,但它不可避免地会让你的生活变得困难。
设计此数据模型的正确方法是为 product_id
制作一个单独的 table,如下所示:
create table order_product (
order_id int not null
, product_id int not null
)
这个 table 在您的场景中看起来像这样:
order_id product_id
-------- ----------
1 1
2 1
3 1
4 1
4 2
4 3
现在您可以使用 order_product
来制定联接,确保联接也适用于多产品订单:
SELECT `Order`.*, `products`.*, `psettings`.*, `City`.`name`, `Location`.`name`
FROM `amrajegeachi`.`orders` AS `Order`
LEFT JOIN `amrajegeachi`.`cities` AS `City` ON (`Order`.`city_id` = `City`.`id`)
LEFT JOIN `amrajegeachi`.`locations` AS `Location` ON (`Order`.`location_id` = `Location`.`id`)
-- This line takes care of dealing with multiple orders:
LEFT JOIN order_product ON `Order`.id=order_product.order_id
LEFT JOIN `products` ON order_product.product_id = `products`.`id`
LEFT JOIN `psettings` ON `Order`.`product_id` = `psettings`.`product_id`
WHERE `status` = 'No contact'