繁体   English   中英

加入Query WHERE子句

[英]Join in Query WHERE clause

我有几个表,我试图有效地获取数据。

我有一个草拟的查询:

SELECT products.id, products.name products.extended_description, products.catalogid, products.image1, products.image2, products.stock, products.price, manufacturer.manufacturer, products.weight
FROM products 
JOIN manufacturer ON (products.manufacturer = manufacturer.id)
WHERE category.category_name = ?;

显然这是一个破碎的查询,但我不知道如何解决这个问题。 我需要通过products.catalogid字段以某种方式将category表连接到product_category表,该表与products表相关。

我的微弱尝试是这样的:

SELECT products.id, products.name products.extended_description, products.catalogid, products.image1, products.image2, products.stock, products.price, manufacturer.manufacturer, products.weight
FROM products
JOIN manufacturer ON (products.manufacturer = manufacturer.id)
FROM category
JOIN product_category ON (category.id = (SELECT product_category.id FROM product_category WHERE product_category.catalogid /*I'm so lost...*/))
WHERE category.category_name = ?;

基本上我需要在数据库中查询类别名称为“NEW”的SELECT子句中的所有信息......我完全难倒(我的SQL显然需要一些工作!)

像这样的东西,只是保持加入和加入....

SELECT
    *
FROM
    products as p
JOIN
    manufacturer as m
ON
    p.manufacturer = m.id
JOIN
    product_category as pc
ON
    pc.product = p.id
JOIN
    category as c
ON
    c.id=pc.category
WHERE
    c.name = "NEW"

由于您有product_category表,因此您的产品可能属于多个类别。 在这种情况下,您需要检查您要查找的类别是否属于分配给您的产品的类别。

一种方法是使用EXISTS条件:

SELECT p.id, p.name p.extended_description, p.catalogid, p.image1, p.image2, p.stock, p.price, m.manufacturer, p.weight
FROM products p
JOIN manufacturer m ON (p.manufacturer = m.id)
WHERE
EXISTS (
    SELECT *
    FROM product_category pc
    JOIN category c ON c.id=pc.categoryId
    WHERE pc.productId = p.id
    AND c.category.category_name = ?
)

我假设product_category多对多表有列categoryIdproductId ,它们汇集了产品的ID和该产品所属的类别。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM