加入3个mysql表并检索所有相关数据

时间:2013-03-22 09:23:32

标签: mysql sql

我有3个sql表

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

product_name  | description | ucode | heaven | star_rating | product_id

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

img_url | photo_id

product_img_map - 使用产品映射正确的图像

photo_id  | product_id

如果我在product_id中有product_images我可以很容易地加入它们,但是有一个单独的表格可以将照片与产品一起映射。

有人可以告诉我如何查询所有产品详细信息和产品图片?

7 个答案:

答案 0 :(得分: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来获取产品信息。

答案 1 :(得分: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;

答案 2 :(得分: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

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

答案 3 :(得分: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;

请尝试以上查询。

答案 4 :(得分:-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  

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

答案 5 :(得分:-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

答案 6 :(得分:-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