Извлечение данных из двух отдельных таблиц SQL, основанных на JOIN, но использующих столбец, отсутствующий в JOIN или SELECT - PullRequest
0 голосов
/ 05 июня 2019

Это основано на курсе Академии Хана .У меня есть 2 таблицы SQLite:

CREATE TABLE table1 (id STRING PRIMARY KEY, charge_id TEXT, amount INTEGER, currency INTEGER, country STRING);
INSERT INTO table1 
(     id, charge_id, amount, currency, country) VALUES 
('0xb01',     '0x1',   2000,    'USD',   'USA'),
('0x0a1',     '0x1',    500,    'USD',   'USA'),
('0x0c1',     '0x1',   1000,    'CAD',   'USA'),
('0xs31',     '0x4',   1000,    'YEN',    'CA');

CREATE TABLE table2 (id STRING PRIMARY KEY, charge_id TEXT, value VARIABLE);
INSERT INTO table2 
(     id, charge_id, value            ) VALUES 
('0x34s',     '0x1', '123 main street'),
('0x3ze',     '0x1', 'merchant-id-001'),
('0x3w2',     '0x2', 'zip-code-90210' ),
('0x35k',     '0x2', 'merchant-id-002');

. Я бы ВЫБИЛ сумму, валюту и страну из таблицы 1 (Сборы) и присоединился к таблице 2 (Метаданные) на основе идентификатора.Charges использует ID, а метаданные хранят метатеги с уникальным идентификатором [id], равным заряду [id] из Charges.Я хочу сгруппировать общую сумму, общую валюту для каждого merchant_id и только те платежи, которые были сделаны в США.

Пошаговый псевдокод:

(1) найти все платежив США (сборы country)
(2) сопоставляют все charge_ids из сборов (id) с расходами в метаданных (id)
(3), отделяют каждый сбор с помощью merchant_id (метаданные * 1015)*)
(4) отображать общую сумму, валюту по merchant_id (amount, расходы currency, value)

Это сложно, потому что:

(1) Я хочу выбрать из Charges и
(2) присоединиться к метаданным с помощью [id]
(3), но каждая запись метаданных имеет только charge_id и тег метаданных, который будет соответствовать merchant_id и заряду

Результат запроса, который мне нужен:

value (merchant id)   currency       total amount
merchant-id-001       usd            2500
merchant-id-001       cad            1000
merchant-id-002       yen             200
merchant-id-002       cad              50

В настоящее время у меня есть этот запрос, но он не работает:

select table1.amount, table1.currency, table1.country, count(*)
from  table1
LEFT JOIN  table1
UNION ALL
SELECT table2.value
FROM CHARGES_table2
LEFT JOIN table2
ON table1.id = table2.id
WHERE table1.country = 'USA'
GROUP BY table2.value

Я получаю ошибкиПараметры объединения: 2,1

1 Ответ

1 голос
/ 07 июня 2019

Прочитайте грамматику и другую документацию для выражений, которые вы используете.Аргументами UNION являются два SELECT, и он может иметь окончательный ORDER BY.Вот разбор:

    select table1.amount, table1.currency, table1.country, count(*)
    from  table1
    LEFT JOIN  table1

UNION ALL

    SELECT table2.value
    FROM CHARGES_table2
    LEFT JOIN table2
    ON table1.id = table2.id
    WHERE table1.country = 'USA'
    GROUP BY table2.value

UNION помещает строки своих аргументов в одну таблицу, поэтому он также требует, чтобы их столбцы совпадали по количеству и имели совместимые типы.Здесь числа не согласны.

1005 * Там нет table1 в области видимости во втором ВЫБРАТЬ так, что ошибка в изоляции, что спорный вопрос данного Союза.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...