如何在 MySQL 中将表连接在一起?

How to join tables together in MySQL?

我有 5 张桌子:

  1. 站点
    • id
    • 站点名称
  2. 类别
    • id
    • 姓名
  3. 产品
    • id
    • 姓名
    • 还有一些列
  4. x_products_site
    • product_id
    • site_id
  5. x_products_categories
    • product_id
    • category_id

现在,我想要一个类别产品的所有数据(假设所有数据都来自 ID 为 1 的类别),但只有一个产品的数据是针对特定站点的。

我的第一次尝试是

    SELECT p.* 
    FROM `products` p,
         `categories` c,
         `x_product_site` xps, 
         `x_product_category` xpc
    WHERE c.`id` = '%1$s'
    AND c.`id` = xpc.`category_id`
    AND xpc.`product_id` = xps.`product_id`
    AND p.`id` = xpc.`product_id`
    ORDER BY p.`name` ASC

显然这不是方法。

谁能给我一个带或不带连接的正确查询?

试试这个:

如果你有 site_id 然后使用下面的查询:

SELECT P.id, P.name 
FROM products P 
INNER JOIN x_products_categories PC ON P.id = PC.product_id AND PC.category_id = 1
INNER JOIN x_products_site PS ON P.id = PS.product_id 
WHERE PS.site_id = 1
ORDER BY P.name;

如果你有 site_name 然后使用下面的查询:

SELECT P.id, P.name 
FROM products P 
INNER JOIN x_products_categories PC ON P.id = PC.product_id AND PC.category_id = 1
INNER JOIN x_products_site PS ON P.id = PS.product_id 
INNER JOIN sites S ON PS.site_id = S.id 
WHERE S.site_name LIKE '%site_name%'
ORDER BY P.name;
SELECT 
  p.* 
FROM
  products p
  , categories c
  , sites s
  , x_product_categories xpc
  , x_product_site xps 
WHERE xpc.category_id = c.id 
  AND xpc.product_id = p.id 
  AND xps.product_id = p.id 
  AND xps.site_id = s.id 
  AND s.sitename = "site1" 
  AND c.id = 1 ;

不需要加入tables。毕竟,您只想 select 来自产品。使用 IN 子句查看产品是否 其他 table 中。这里根本不需要 table 类别。 table 中没有任何内容可以为我们提供所需的任何信息。

假设您想要类别 1 和站点 5 的产品。

select *
from products
where product_id in (select pc.product_id from x_product_category pc where pc.id = 1)
and product_id in (select ps.product_id from x_product_site ps where ps.id = 5);

为了完整起见,您可以对 EXISTS 执行相同的操作。 (好吧,毕竟,您想知道在其他 table 中是否存在 的产品记录 。)

select *
from products p
where exists (select * from x_product_category pc where pc.product_id = p.id and pc.id = 1)
and exists (select * from x_product_site ps where ps.product_id = p.id and ps.id = 5);