我想连接两个表,但table1上的每条记录只能得到一条table2记录
例如:
SELECT c.id, c.title, p.id AS product_id, p.title
FROM categories AS c
JOIN products AS p ON c.id = p.category_id这将使我获得products中的所有记录,这不是我想要的。我希望每个类别的第一个产品为1(我在products字段中有一个sort列)。
我该怎么做呢?
发布于 2011-07-30 06:01:35
我会尝试这样的东西:
SELECT C.*,
(SELECT P.id, P.title
FROM products as P
WHERE P.category_id = C.id
LIMIT 1)
FROM categories C发布于 2014-06-27 09:22:41
我更喜欢类似问题中描述的另一种方法:https://stackoverflow.com/a/11885521/2215679
这种方法更好,尤其是在需要在SELECT中显示多个字段的情况下。要避免Error Code: 1241. Operand should contain 1 column(s)或双重子选择,请为每一列选择。
根据您的情况,查询应如下所示:
SELECT
c.id,
c.title,
p.id AS product_id,
p.title AS product_title
FROM categories AS c
JOIN products AS p ON
p.id = ( --- the PRIMARY KEY
SELECT p1.id FROM products AS p1
WHERE c.id=p1.category_id
ORDER BY p1.id LIMIT 1
)发布于 2015-03-04 19:37:13
被@goggin13接受的答案看起来是错误的。到目前为止提供的其他解决方案也可以工作,但会受到n+1问题的影响,因此会影响性能。
n+1问题:如果有100个类别,那么我们必须执行1次选择来获取类别,然后对于返回的100个类别中的每个类别,我们都需要执行一次选择来获取该类别中的产品。因此将执行101个SELECT查询。
我的替代解决方案解决了n+1问题,因此应该会有更高的性能,因为只执行了2个选择。
SELECT
*
FROM
(SELECT c.id, c.title, p.id AS product_id, p.title
FROM categories AS c
JOIN products AS p ON c.id = p.category_id
ORDER BY c.id ASC) AS a
GROUP BY id;https://stackoverflow.com/questions/6879391
复制相似问题