MySQL,JOIN,当总数= 1时

时间:2013-07-16 06:50:45

标签: mysql sql join

我在编写MYSQL查询时几乎没什么帮助。

我想从3个表中检索数据,但我想仅在count()值等于1时才从第3个表中检索数据。

请参阅以下查询。

SELECT count(orderdetails.orderId) as total,gadgets.*,orders.* FROM orders
JOIN orderdetails ON orders.orderId = orderdetails.orderId
CASE total WHEN 1 THEN (JOIN gadgets ON gadgets.gadgetId = orders.gadgetId)

GROUP BY orders.orderId
ORDER BY orders.orderId DESC;

mysql总是给我一个错误,我无法通过互联网找到任何解决方案。

3 个答案:

答案 0 :(得分:2)

只需在加入中添加一个简单条件,它就可以工作(当然你已经使它成为Left Join)。

SELECT count(orderdetails.orderId) as total,gadgets.*,orders.* FROM orders
JOIN orderdetails ON orders.orderId = orderdetails.orderId
LEFT JOIN gadgets ON gadgets.gadgetId = orders.gadgetId
and total=1   --Simple Logic
GROUP BY orders.orderId
ORDER BY orders.orderId DESC;

答案 1 :(得分:2)

SELECT
    g.*, o.* 
FROM 
    orders AS o
  JOIN 
    ( SELECT orderId
      FROM orderdetails 
      GROUP BY orderId
      HAVING COUNT(*) = 1
     ) AS od 
     ON o.orderId = od.orderId
  JOIN gadgets AS g
    ON g.gadgetId = o.gadgetId
ORDER BY 
    o.orderId DESC ;

答案 2 :(得分:0)

您可以加入该表,只获取total = 1

的结果
SELECT count(orderdetails.orderId) as total,gadgets.*,orders.* FROM orders
JOIN orderdetails ON orders.orderId = orderdetails.orderId
JOIN gadgets ON gadgets.gadgetId = orders.gadgetId
GROUP BY orders.orderId
HAVING total = 1
ORDER BY orders.orderId DESC;

HTH