MySQL, JOIN, когда всего = 1

Мне нужна небольшая помощь в написании MYSQL Query.

я хочу получить данные из 3 таблиц, но я хочу получить данные из 3-й таблицы, только если значение count() равно 1.

пожалуйста, смотрите ниже запрос.

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 ответа

Решение

Просто добавьте простое условие в Join, и оно будет работать (Конечно, вы должны сделать это 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;
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 ;

Вы можете присоединиться к таблице и получить только результаты, имеющие 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;

НТН

Другие вопросы по тегам