#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. это был прямой ответ, большое вам спасибо