【发布时间】:2013-12-03 14:10:00
【问题描述】:
这与Limit results from joined table to one row 非常相似,但我正在努力让它完全按照我的需要工作......
表结构非常相似:
CREATE TABLE tblProducts (
intProductID int(11) NULL AUTO_INCREMENT,
strProductName varchar(255) NULL,
PRIMARY KEY (intProductID)
);
CREATE TABLE tblProductImages (
intImageID int(11) NULL AUTO_INCREMENT,
intProductID int(11) NULL,
strImageName varchar(255) NULL,
intOrder int(11) NULL,
PRIMARY KEY (intImageID)
);
用以下内容填充表:
INSERT INTO tblProducts (strProductName)
VALUES
('Product #1'), ('Product #2'), ('Product #3');
INSERT INTO tblProductImages (intProductID, strImageName, intOrder)
VALUES
(1, 'image_for_1.jpg', 1),
(2, '1st_image_for_2.jpg', 1),
(2, '2nd_image_for_2.jpg', 2);
我想做一个返回所有 3 个产品的 SELECT,并带有适当的图像。类似于:
intProductID, strProductName, strImageName
1, Product #1, image_for_1.jpg
2, Product #2, 1st_image_for_2.jpg
3, Product #3, NULL
一个简单的解决方案是:
SELECT intProductID, strProductName,
(SELECT strImageName
FROM tblProductImages
WHERE tblProductImages.intProductID = tblProducts.intProductID
ORDER BY intOrder
LIMIT 1)
FROM tblProducts
但如果我想从 tblProductImages(例如 AltText)添加和返回另一个字段,这将失败
我在http://sqlfiddle.com/#!2/883c5/1 设置了一个小提琴
谢谢
【问题讨论】:
-
您确定插入 tblProductImages 的值吗?因为它们都有 1 作为 intProductId... 这看起来与想要的结果不一致。
-
你需要使用
LEFT JOIN而不是你正在做的时髦的SELECT -
很好看的 Raphaël - 它已修复。 nrathaus - LEFT JOIN 不起作用,因为它将返回产品 2 的 2 条记录(两个图像),而我只想要 1 条。
标签: mysql