Помогите разобраться с ошибкой. Нужно выбрать по столбцу из 2 таблиц. Результирующие Столбцы представляют собой суммы от основных столбцов в каждой таблице. т.е. в 1 таблице 6 столбцов которые суммируются в 1 и во второй таблице 5 столбцов которые суммируются в 1. При этом выборка идет по дате - с такого то по такое то число из каждой таблицы происходит суммирование столбцов, вначале внутри каждой из таблиц а затем между 2 результирующими столбцами. Написал запрос для того что бы вывести 2 результирующих столбца :
SELECT
col1, col2
FROM
(
SELECT
(SUM(`CA_USD`) + SUM(`CA_EUR`) + SUM(`CA_GBP`)) as col1,
DATEH
FROM
`cashaccounts`
WHERE
`orderKlient` = 'q111'
AND
(DATEH >= '2017-07-25' and DATEH <= '2017-07-26')
union
SELECT
(SUM(`Bond`) + SUM(`Fund`)) as col2,
DATEH
FROM
`paper`
WHERE
`order` = 'q111'
AND
(DATEH >= '2017-07-25' and DATEH <= '2017-07-26')
)x group by DATEH
Ожидалось получить 2 столбца из сумм столбцов каждой таблицы однако получаю ошибку :
Unknown column 'col2' in 'field list' 0.000 sec
Подскажите как исправить запрос ? Использовать Join ?
Если вам надо два столбца сумм рядом с одной датой и даты в DATEH обеих таблиц всегда одинаковы, то вам нужно что-то такое(ниже). Если вы не уверены, что даты всегда одинаковы - добавьте через UNION ALL обе таблицы c null, как предложил Mike в комментарии. Могут быть тонкости, т.к. нам неизвестен формат столбца DATEH и нужно аккуратно их сравнивать.
SELECT (SUM(c.`CA_USD`) + SUM(c.`CA_EUR`) + SUM(c.`CA_GBP`)) as col1,
(SUM(p.`Bond`) + SUM(p.`Fund`)) as col2, c.DATEH
FROM `cashaccounts` as c
JOIN `paper` as p ON c.DATEH = p.DATEH WHERE
c.`orderKlient` = 'q111'
AND
(c.DATEH >= '2017-07-25' and c.DATEH <= '2017-07-26')
AND
p.`order` = 'q111'
AND
(p.DATEH >= '2017-07-25' and p.DATEH <= '2017-07-26')
UNION добавляет строки в выборку, в те же столбцы что и в первом SELECT. Все значения col2 из второго запроса попадают в col1. Столбца col2 в результирующей выборке нет.
Разобрался, надо было делать через Left join
SELECT
cashaccounts.CA_AUD + cashaccounts.CA_EUR +
paper.Bond + paper.Fund as `value`
FROM
cashaccounts
LEFT JOIN
paper ON cashaccounts.DATEH = paper.DATEH
WHERE
(cashaccounts.DATEH >= '2017-07-26' and cashaccounts.DATEH <= '2017-07-28')
and cashaccounts.orderKlient = 'q111'
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
В DB есть файл изображение в виде массива байтов, который нужно отдать клиенту через сервлетВ nio есть конструкция в Files
Всем приветВозник вопрос в том как использовать значения внутренних классов