我有一个有两列的表。一个是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_1
和image_2
而非image_name
的数组。
有人可以帮忙吗?感谢。
我想在数组中有两个数组或对象:
[item] =>友善的狗 [image_1] => terrier.jpg [image_2] => schnauzer.jpg
和
[item] =>忠诚的狗 [image_1] => schnauzer.jpg [image_2] => beagle.jpg
答案 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_1
和image_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