2016-09-26 2 views
0

Как узнать, какие заказы не имеют строк данных?Внутреннее соединение, право присоединиться? Count rows

Таблица Orders: OrderId (INT), CUSTOMERNAME, deliveryDate (дата), цена (десятичное)

Таблица Детали: Detailid (INT), OrderId (INT), SKU (VARCHAR), количество (интермедиат)

Я попытался (без успеха):

SELECT 
    COUNT(Details.detailId) AS Tot, 
    Orders.orderId 
FROM Details 
INNER JOIN Orders 
    ON Details.orderId = Orders.orderId 
GROUP BY Details.orderId 
HAVING Tot = 0 

ответ

0

Попробуйте с помощью LEFT OUTER JOIN join. См. Также How to retrieve non-matching results in mysql.

INNER JOINS выберите строки из двух таблиц, которые соответствуют. Все остальное будет отброшено и не доступны в наборе результатов, которые вы можете запросить с HAVING

LEFT OUTER JOINS выбрать строку для каждой записи в таблице слева (Orders). Всегда создавайте строку для правой таблицы (Details). Если совпадающая строка не найдена, значения будут NULL. Мы можем использовать это в наших интересах, попробуйте:

SELECT Orders.orderId, Details.orderId 
FROM Orders 
LEFT OUTER JOIN Details    -- generate a row for every row in a 
            -- make null if not matching 
ON Details.orderId = Orders.orderId -- match condition 
WHERE Details.orderId IS NULL 
4

Как насчет not in или not exists?

select o.* 
from orders o 
where not exists (select 1 
        from details d 
        where d.orderId = o.orderId 
       ); 

Если вы не хотите, чтобы все столбцы, а затем select те, которые вы хотите во внешнем select.

0

выберите его с внешним соединением проверку, если OrderId равно нулю ... как этот

SELECT 
    o.* 
FROM orders o 
LEFT OUTER JOIN details d 
    ON d.orderId = o.orderId 
WHERE d.orderId IS NULL 
Смежные вопросы