2

我有 3 个 sql 表

product_data- 存储有关产品的所有详细信息

product_name  | description | ucode | heaven | star_rating | product_id

product_images- 所有带有照片 ID 的图片网址(每个产品分配了 1 个或多个图片)

img_url | photo_id

product_img_map- 将正确的图像与产品映射

photo_id  | product_id

如果我有product_idproduct_images我可以很容易地加入他们,但是有一个单独的表格可以将照片与产品对应起来。

谁能告诉我如何查询产品的所有产品详细信息和图像?

4

7 回答 7

2

JOIN两个表进入product_data

SELECT *
FROM product_data p
LEFT JOIN product_img_map im ON im.product_id = p.product_id
LEFT JOIN product_images i ON i.photo_id = im.photo_id

LEFT JOIN即使没有与该产品相关的照片,我也曾经获取产品信息。

于 2013-03-22T09:27:59.580 回答
0
 product(product_id*)

 image(image_id*)

 product_image(product_id*,image_id*)

 * = (component of) PRIMARY KEY

 SELECT * 
   FROM product p 
   LEFT 
   JOIN product_image pi 
     ON pi.product_id = p.product_id
   LEFT
   JOIN image i
     ON i.image_id = pi.image_id;
于 2013-03-22T09:29:55.317 回答
0

您可以在任意数量的键上组合任意数量的连接,因为每次连接都需要指定键。

SELECT *
    FROM product_data
    LEFT JOIN product_img_map
        ON product_data.id=product_img_map.product_id
    LEFT JOIN product_images
        ON product_images.id=product_img_map.photo_id

这种带有缩短表名的变体也很常见,但它是同一件事,只是外观不同。

SELECT *
    FROM product_data d
    LEFT JOIN product_img_map m
        ON d.id=m.product_id
    LEFT JOIN product_images i
        ON i.id=m.photo_id

您将多次获得每个产品的线条,每个关联图像一次。这很正常,但您可能需要编写一些代码来解析它。使这更容易是经常使用 ORM(“对象关系映射器”)的原因之一,这使得以任何您喜欢的方式循环数据或图像变得更加容易。

于 2013-03-22T09:32:46.343 回答
0
select pi.img_url, pi.photo_id,pim.product_id,pd.* 
   FROM product_images as pi 
   left join product_img_map as pim on pim.photo_id  = pi.photo_id 
   left join product_data as pd on pd.product_id =  pim.product_id;

请尝试以上查询。

于 2013-03-22T09:34:46.623 回答
-1

你需要做内部连接。试试下面

 select * from product_data pd
 left join product_img_map  im on pd. product_id = im.product_id
 left join product_images pi on im.photo_id   = pi.photo_id  

我认为左连接是正确的,因为可能有产品没有与之关联的照片。

于 2013-03-22T09:29:09.033 回答
-1

试试这个:

Select * From product_data pd Inner JOin product_img_map pim on pd.product_id=pim.product_id Inner JOin product_images pm on pm.photo_id=pim.photo_id
于 2013-03-22T09:29:20.850 回答
-1
select * from product_data pd left join product_img_map pim 
on pd.product_id = pim.product_id
left join product_images pi on
pim.photo_id = pi.photo_id
于 2013-03-22T09:29:29.897 回答