2014-01-13 8 views
1

Это интересный вопрос, я знаю это. И, возможно, это все, потому что я действительно устал.COUNT из двух разных таблиц

Теперь не вините дизайн - он испорчен, но ничего не могу с этим поделать, хорошо?

  • Две таблицы, связанные идентификационным полем.
  • Первая таблица содержит позиции на складе (таблица P)
  • Вторая таблица содержит статьи, хранящиеся на каждой позиции на складе (таблица PA)
  • ВСЕ позиции на складе присутствуют в P-таблицы (> 5000 записей)
  • Каждая позиция может содержать более одной статье
  • являются позиции в P-таблице, не присутствующие в ПА-таблице

Кол-во от позиционных элементов PLUS позиции не присутствует в позиционных элементах.

Есть ли действительно нет лучшего способа, чем это полнейшей глупостью ?:

SELECT SUM(row) 
FROM 
(
    SELECT COUNT(*) row 
    FROM PA 
    UNION 
    SELECT COUNT(*) 
    FROM P 
    WHERE ID NOT IN 
    (
     SELECT P_ID 
     FROM PA 
    ) 
) as rowcounter 

Выборочные данные

Таблица P:

ID Name 
1 A01 
2 A03 
3 B01 * 
4 B02 * 

Таблица PA:

ID P_ID A_ID 
1 1  201 * 
2 1  202 * 
3 1  203 * 
4 2  205 * 

И возвращенный счет 6 => 4 строки из PA + 2 строки (P_ID не присутствуют в PA). Выбранные строки отмечены звездочкой (*).

+1

Во-первых, см РЕГИСТРИРУЙТЕСЬ – Strawberry

+1

Вы можете уточнить ваш вопрос с образцами данных и ожидаемых результатов? Вы говорите: «Я хочу считать ВСЕ позиции и позиционные элементы». Я бы ожидал, что два запроса будут возвращены вашим запросом. –

+0

Уточнено мое задание, добавлены данные образца и ожидаемый результат. Вопрос все еще немного нечеткий, но должен быть ясным из-за нечеткости по образцовым данным. Спасибо. –

ответ

0

Попробуйте это:

SELECT P.ID, COUNT(PA.ID) noOfArticles 
FROM P 
LEFT JOIN PA ON P.ID = PA.P_ID 
GROUP BY P.ID 
+0

Нет, это возвращает количество статей для каждой позиции, то есть возвращает много строк (позиций) –

Смежные вопросы