Выбор Из 2 Разных Таблиц

#mysql #sql #subquery

Вопрос:

версия sql : ‘5.7.34’

как показано ниже :

Имя Первой Таблицы : Invoice

описание счета-фактуры таблицы

имя столбца имя типа дополнительный
номер счета-фактуры int(11) AI PK
номер элемента символ(255)
Описание символ(255)
кол-во десятичная дробь(9,2)

Описание таблицы Товаров :

имя столбца имя типа дополнительный
ID int(11) AI PK
номер элемента варчар(255) ПК
Item_Desc варчар(255)
Start_Balance десятичная дробь(9,2)

В таблице Счетов есть следующие поля :

 ItemNumber ,InvoiceNumber ,  Item_Desc , Qty
 

В таблице «Товары» есть следующие поля :

 ItemNumber , Item_Desc, Start_Balance
 

Основным ключом для счета-фактуры является номер счета-фактуры

Первичный ключ для таблицы элементов-Item_Number

Таким образом, в основном то, что я пытаюсь сделать, — это получить оставшееся количество, получив Start_balance из таблицы номенклатур и вычтя его из общего количества каждого заказа на номенклатуру в таблице счетов-фактур на основе номера номенклатуры .

Таблица счетов-фактур может содержать несколько записей с номером товара, в то время как таблица товаров имеет только уникальный номер товара для каждой строки .

Как сделать оператор select для объединения обеих таблиц, чтобы получить оставшееся количество для каждого номера элемента, объединив обе таблицы ?

Я попробовал это:

     (SELECT 
        `items`.`Start_Balance_Qty` - SUM(`invoice`.`QTY`)) AS `currentitembalance`,
        `details`.`item_number` AS `itemnumber`,
        `details`.`DESCRIPTION` AS `itemdesc`,
        `items`.`item_number` AS `item_number`
    FROM
    (`items`
    JOIN `invoice`)
    WHERE

       (`invoice`.`item_number` = `items`.`item_number`)
       GROUP BY `items`.`item_number`)
 

Он работает нормально , но проблема в том, что он получает только записи в таблице счетов-фактур , которые соответствуют номеру в обеих таблицах , мне нужно отобразить все поля в таблице товаров, чтобы показать текущий баланс, другими словами, я хочу, чтобы результат отображал оставшееся количество в таблице товаров, несмотря на то, сколько записей совпадают в таблице счетов-фактур.

Комментарии:

1. Используете ли вы MySQL 5.6 версию? Если вы используете group by , выбранные столбцы должны находиться в group by или части функции агрегирования. Пожалуйста, добавьте описание таблицы, некоторые данные и ваш ожидаемый результат ?

2. хорошо, я скоро добавлю ожидаемый результат

Ответ №1:

Используйте LEFT JOIN , чтобы убедиться, что все строки в ведущей таблице возвращены в результирующем наборе, даже если он не соответствует ни одной записи в соединяющей таблице, добавьте условие соединения в ON предложение вместо WHERE предложения. Когда SUM значения преобразуются NULL в 0

 SELECT 
a.item_number AS itemnumber, 
MAX(a.description) AS itemdesc, 
MAX(a.start_balance_qty) - SUM(IFNULL(b.qty, 0))
FROM items a
LEFT JOIN invoice b ON a.item_number = b.item_number
GROUP BY a.item_number
;
 

Комментарии:

1. это был прямой ответ, большое вам спасибо