[英]MySQL: Joining 3 tables, LIMIT results by first table?
我从prod_drop中选择所有内容,并加入其他2个表以获取其他数据。 我不希望重复prod_drop的任何行,我只希望每prod_drop行1行。
这是我的查询:
SELECT
prod_drop.*
, prod_drop_products.product_id
, cart_product.product_image_sm
FROM
prod_drop
LEFT JOIN
prod_drop_products
ON
prod_drop.prod_drop_id = prod_drop_products.prod_drop_id
LEFT JOIN
cart_product
ON
prod_drop_products.product_id = cart_product.product_id
ORDER BY
prod_drop_id
DESC
结果如下:
prod_drop_id prod_drop_name prod_drop_available product_id product_image_sm
51 Carat Weight yes 4971 S5-3515Y_S.jpg
51 Carat Weight yes 4970 S5-3515Y_S.jpg
51 Carat Weight yes 4969 S5-3515Y_S.jpg
50 Carat Weight yes 4959 S5-3515_S.jpg
50 Carat Weight yes 4960 S5-3515_S.jpg
50 Carat Weight yes 4958 S5-3515_S.jpg
49 Metal Quality yes 3269 Q-8785X-14_S.jpg
49 Metal Quality yes 3270 Q-8785X-14_S.jpg
48 Gold Color yes 1635 1390-Y_S.jpg
48 Gold Color yes 1390 PE0048-12W_S.jpg
但是我只希望每个prod_drop_id有一行(无关紧要),因此本质上我希望我的结果像这样:
prod_drop_id prod_drop_name prod_drop_available product_id product_image_sm
51 Carat Weight yes 4971 S5-3515Y_S.jpg
50 Carat Weight yes 4959 S5-3515_S.jpg
49 Metal Quality yes 3269 Q-8785X-14_S.jpg
48 Gold Color yes 1635 1390-Y_S.jpg
我怎样才能做到这一点?
谢谢!
我想我会在另外两个表上尝试使用MAX(或MIN)。
从数据中可以看出,prod_drop_products中的prod_drop中的每条记录显然有多个记录。 因此,如果您只希望输出中prod_drop中每个不同行的一行,那么您需要从该表中消除输出列,或者决定要让prod_drop_products中的多个行中的哪一行从中获取输出值查询来自该表的输出列(特别是product_id)如果输出哪个product_id无关紧要(从业务角度来看这没有意义,但是...),则可以使用Min或max (),无论您喜欢哪个。 如果确实重要,请指定您要使用哪种逻辑来做出该决定,并可以编辑查询以免...
假设Min()正常,则可以:
SELECT pd.prod_drop_id, pd.prod_drop_name, pd.prod_drop_available,
Min(pp.product_id), Min(cp.product_image_sm)
FROM prod_drop pd
LEFT JOIN prod_drop_products pp
ON pp.prod_drop_id = pd.prod_drop_id
LEFT JOIN cart_product cp
ON cp.product_id = pp.product_id
Group By pd.prod_drop_id, pd.prod_drop_name, pd.prod_drop_available
ORDER BY prod_drop_id DESC
尝试这个:
SELECT a.*, b.product_id, c.product_image_sm
FROM prod_drop a
LEFT JOIN prod_drop_products b ON (a.prod_drop_id = b.prod_drop_id)
LEFT JOIN cart_product c ON (b.product_id = c.product_id)
GROUP BY a.prod_drop_id
ORDER BY a.prod_drop_id DESC
假设重复项仅在cart_product
表中,请尝试以下操作:
SELECT pd.*, pdp.product_id, cp.product_image_sm
FROM prod_drop pd
LEFT JOIN prod_drop_products pdp ON pd.prod_drop_id = pdp.prod_drop_id
LEFT JOIN (
select product_id, min(product_image_sm) as product_image_sm
from cart_product
group by product_id
) cp ON pdp.product_id = cp.product_id
ORDER BY pd.prod_drop_id DESC
如果两个表中都可能有重复项,则需要类似以下内容:
SELECT pd.*, pdp.product_id, cp.product_image_sm
FROM prod_drop pd
LEFT JOIN (
select prod_drop_id, min(product_id) as product_id
from prod_drop_products
group by prod_drop_id
) pdp ON pd.prod_drop_id = pdp.prod_drop_id
LEFT JOIN (
select product_id, min(product_image_sm) as product_image_sm
from cart_product
group by product_id
) cp ON pdp.product_id = cp.product_id
ORDER BY pd.prod_drop_id DESC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.