我有一张products
的表格,其中有许多variants
。 variant
有0到多个images
。
+---------+
| Product |
+---------+
1|
|
|1..n
+---------+
| Variant |
+---------+
1|
|
|0..n
+---------+
| Image |
+---------+
我需要更新products
没有任何variants
的所有images
。我可以使用以下查询找到所有products
variants
没有images
的所有SELECT
DISTINCT `p`.*
FROM `sylius_product` AS `p`
JOIN `sylius_product_variant` AS `v` ON `v`.`product_id` = `p`.`id`
LEFT JOIN `sylius_product_variant_image` AS `i` ON `i`.`variant_id` = `v`.`id`
WHERE `i`.`id` IS NULL
:
product
但如果我没有弄错的话,那么一个产品有两个变体的产品,其中一个有图像,一个没有,将包含在结果集中。
如何构建我的联接/哪里以便我只能检索variants
所有images
没有任何{{1}}的内容?
答案 0 :(得分:1)
您可以通过加入和汇总来完成此操作:
select p.*
from sylius_product p join
sylius_product_variant v
on v.product_id = p.id left join
sylius_product_variant_image i
on i.variant_id = v.id
group by p.id
having max(i.variant_id) is null;
如果没有变体有图像,则产品上根本没有图像。 having
条件也可以写为:
having count(i.variant_id) = 0
答案 1 :(得分:0)
您可以通过
获取所有变体都没有图像的所有产品SELECT `p`.`id`
FROM `sylius_product` p
LEFT JOIN (
SELECT DISTINCT `v`.`product_id`
FROM `sylius_product_variant` AS `v`
JOIN `sylius_product_variant_image` AS `i` ON `i`.`variant_id` = `v`.`id`
) p1
ON `p`.`id` = `p1`.`product_id`
WHERE `p1`.`product_id` IS NULL
连接部分中的子查询将获得其变体具有图像的产品,然后在主查询中我们可以通过使用左连接消除这些产品