В настоящее время у меня есть такие таблицы:
Стол Клиент
ID Name
01 Angel
02 Charlie
Таблица Input1
Name Value
Charlie 5
Angel 7
Charlie 10
Angel 3
Таблица Input2
Name Value
Charlie 10
Angel 5
Charlie 15
Angel 25
Как получить такой результат
Name Input1 Input2
Angel 10 30
Charlie 15 25
В любом случае используйте столбец ID для внешнего ключа, а не Name!
@ BálintBudavölgyi Мне очень жаль, что я новичок в SQL. Я пробовал что-то вроде SELECT Customer.Name, Input1.Value как Input1, Input2.Value как Input2 FROM Customer LEFT JOIN Input1 ON Customer.Name = Input1.Name LEFT JOIN Input2 ON Customer.Name = Input2.Name GROUP BY Name Но он дал мне ошибка.
@BigBother Ускоряет ли запрос, если мы используем столбец ID для внешнего ключа?
Более быстрое соединение и меньшие индексы, но главное - ремонтопригодность (например, имя может измениться, если вы его неправильно написали)
@MochFahmyAinurRofiq Я забыл ответить вам в моем последнем комментарии, так что это просто для того, чтобы вас уведомить ...
Попробуй это:
SELECT
c.Name,
i1."Value" value1,
i2."Value" value2
FROM
Customer c LEFT JOIN
(SELECT Name, SUM("Value") "Value" from input1 group by Name) i1
ON c.Name = i1.Name LEFT JOIN
(SELECT Name, SUM("Value") "Value" from input2 group by Name) i2
ON c.Name = i2.Name
ДЕМО
Value
- зарезервированное слово в Firebird. Пожалуйста, подумайте об изменении имени столбца или поместите его в двойные кавычки (если вы сделаете последнее, обратите внимание, что оно будет чувствительно к регистру)
@BigBother Да, конечно, это всего лишь пример. В моих приложениях в таблицах используется столбец с заглавной буквы и названия на моем родном языке, поэтому в качестве имени столбца не используется зарезервированное слово. :)
Что вы пробовали так далеко?