请有人帮忙解决(我认为)应该是一个相当直接的问题,但我已经把头发弄了好几个小时。
我有2个表,'列表'和'查询'。
我希望返回一组列表以及他们收到的查询数量,例如
清单1(5个查询) 清单2(3个查询) 清单7(2个查询)
到目前为止,我有:
SELECT l.listing_id, COUNT(e.enquiry_id) AS num_enquiries
FROM listings AS l LEFT JOIN enquiries AS e ON l.listing_id = e.enquiry_itemid
WHERE e.enquiry_itemtype='listing' AND enquiry_datesent >= '2011-01-1 0:01' AND enquiry_datesent <= '2011-12-31 23:59'
HAVING num_enquiries > 0
ORDER BY listing_title_e
但这只返回1个列表行,包含所有查询的总数,例如
清单1(10个查询)
正如您所看到的,通过将商品类型“列表”和itemid与listingid匹配,查询与商家信息相关联。
有人能帮帮我吗?非常感谢!
答案 0 :(得分:3)
您不是按l.listing_id
分组。
此外,LEFT JOIN然后过滤掉右表上的空行也没什么意义。您可以简单地INNER JOIN
,除非我遗漏了某些内容
答案 1 :(得分:1)
SELECT l.listing_id, COUNT(e.enquiry_id) AS num_enquiries
FROM listings AS l JOIN enquiries AS e ON l.listing_id = e.enquiry_itemid AND e.enquiry_itemtype='listing' AND enquiry_datesent >= '2011-01-1 0:01' AND enquiry_datesent <= '2011-12-31 23:59'
GROUP BY l.listing_id
ORDER BY listing_title_e
您忘记了分组依据 - 因此您可以获得所有查询的数量,以及为什么您使用左边的加入与HAVING num_enquiries&gt; 0 - JOIN会做同样的事情。查询的条件在ON部分看起来更好