MySQL Join语句从数据库中的同一字段多次提取项目

时间:2011-08-25 16:26:33

标签: mysql

我有一个有两列的表。一个是image_id,一个是image_name。喜欢这个

image_id | image_name
--------------------
1        | terrier.jpg
2        | schnauzer.jpg
3        | beagle.jpg

我还有另一张这样的表:

item           |  image_1 | image_2
------------------------------------
Friendly Dogs  |   1      |    2 
Loyal Dogs     |   2      |    3

第一个表格让我们调用images,第二个表格为dogs

我尝试了以下SQL,但它不起作用:

SELECT * FROM dogs INNER JOIN  images ON images.image_id = dogs.image_1 AND INNER JOIN images ON images_image_id = dogs.image_2

但这错误了。我错过了一些我可以为image_name指定名称某种别名或其他东西的东西,所以它在查询中不重叠。

我想要的是一个包含image_1image_2而非image_name的数组。

有人可以帮忙吗?感谢。

我想在数组中有两个数组或对象:

[item] =>友善的狗 [image_1] => terrier.jpg [image_2] => schnauzer.jpg

[item] =>忠诚的狗 [image_1] => schnauzer.jpg [image_2] => beagle.jpg

2 个答案:

答案 0 :(得分:2)

您可以多次加入表格:

SELECT d.item AS dog, i1.image_name AS im1, i2.image_name AS im2
FROM dogs AS d JOIN images AS i1 ON (i1.image_id = d.image_1)
               JOIN images AS i2 ON (i2.image_id = d.image_2)

答案 1 :(得分:0)

    SELECT d.item, i1.image_name image_1, i2.image_name image_2
      FROM dogs d
INNER JOIN images i1 
        ON d.image_1 = i1.image_id
INNER JOIN images i2 
        ON d.image_2 = i2.image_id

我假设所有的狗都会在image_1image_2列上显示图片。


注意:dogs表不在First normal form中。如果您创建了另一个表来保存关系,那么它将被标准化。

dog_id | item           
------------------------
1      | Friendly Dogs  
2      | Loyal Dogs     

dogs_images

dog_id | image_id
-----------------
1      | 1
1      | 2
2      | 2
2      | 3

更新

关系表的查询是:

   SELECT d.dog_id, d.item, i.image_name
     FROM dogs d
LEFT JOIN dogs_images di
       ON d.dog_id = di.dog_id
LEFT JOIN images i
       ON di.image_id = i.image_id

结果如下:

dog_id | item           | image_name   
------------------------------------
1      | Friendly Dogs  | terrier.jpg
1      | Friendly Dogs  | schnauzer.jpg
2      | Loyal Dogs     | schnauzer.jpg
2      | Loyal Dogs     | beagle.jpg