Как вывести столбцы из разных таблиц sql
Перейти к содержимому

Как вывести столбцы из разных таблиц sql

  • автор:

столбцы из разных таблиц вывести в разные столбцы

условно есть таблица 1, в ней есть id , code и name . в таблице 2 есть id , code , name . вопрос вот в чём, как вывести 1.id в один столбец и вывести 2.id во второй столбец? пробовал join правый, левый, внутренний и т.д. подскажите, решение где то рядом, но ускользает от меня. upd: пробовал cross join , но он просто перемножил id из таблиц. left join возвращает id только из таблицы 1. right join возвращает id из таблицы 2, но почему-то пустые строки, но кол-во строк совпадает с кол-вом строк из 2 таблицы.

Отслеживать
задан 22 мар в 4:28
27 3 3 бронзовых знака
А что, таблицы как-то связаны?
22 мар в 4:42
@Oopss, id code name есть повторяющиеся значения, но не все
22 мар в 4:48
@Зонтик важнее было бы пример данных в табличках и ожидаемый результат. Попытки тут ни к чему
22 мар в 5:12
уточните вашу БД и какая связь между таблицами, именно логическую, а не на уровне сервера БД
27 мар в 4:07

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Уточните БД которое вы используете. А вообще задача стандартная, попробуйте следующий запрос: Насколько я понял, code является бизнес ключём, т.е. определяет уникальность записи..

Пусть это будут таблицы Human и Enemy :

SELECT H.Id, E.Id, COALESCE(H.code, E.code) as code, COALESCE(H.name, E.name) as name FROM Human H FULL JOIN Enemy E on H.code = E.code --H.name = E.name -- это условие стоит раскомментировать, --если связка по имени имеет место быть 

@Oopss, id code name есть повторяющиеся значения, но не все

Можно добавить дистинкт в первую или вторую или в обе таблички перед соединением.

Получится что-то вроде:

SELECT H.Id, E.Id, COALESCE(H.code, E.code) as code, COALESCE(H.name, E.name) as name FROM (SELECT DISTINCT id, code, name FROM Human) as H FULL JOIN (SELECT DISTINCT id, code, name FROM Enemy) as E on H.code = E.code 

Вам нужно определиться и описать в вопросе какая связь между этими таблицами. Я предположил, что поле code .

Как вычитать сумму столбцов из разных таблиц

Есть 2 таблицы, нужно вычесть сумму одной таблицы из суммы другой, если просто вводить table1-table2, то получается не 1 строка а несколько, также пробовал чз SUM, получается в одной строке но неправильно(оно вычитает из каждого значения 1 таблицы, значения 2 таблицы и суммирует их).

INSERT Отчет(Дата, Прибыль) SELECT GETDATE(), Начисление.Сумма-Снятие.Итог FROM Начисление, Снятие;

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Рассчитать сумму столбцов из разных таблиц
Как подсчитать сумму из одного столбца "Начислено"-17000р со 2 столбом "Надбавка"-2500р и чтобы.

Как вычесть значения столбцов из разных таблиц в Access?
Подскажите пожалуйста. Есть таблица выдача и склад,при заполнении таблица выдача столбца товар.

Умножение столбцов из разных таблиц
var sumk: real; begin sumk:=0; tbl1.First; While not tbl1.eof do begin sumk:=sumk+tbl1 *.

Как вычитать из двух таблиц записи Kak vychitat’ iz dvukh tablit
Есть БД Акссес Сделана из а к есть две таблицы состав и корзину без связи между ними. В составе.

1634 / 1135 / 171
Регистрация: 23.07.2010
Сообщений: 6,713

ЦитатаСообщение от dsadsadas Посмотреть сообщение

SELECT GETDATE(), Начисление.Сумма-Снятие.Итог FROM Начисление, Снятие

Добавлено через 40 секунд
sum и group by не предлагть?

Регистрация: 16.09.2019
Сообщений: 26

GROUP BY не получится тк таблицы разные, я хз если у тя есть варианты как из 2 таблиц group by нормальный сделать то можешь предлагать, про SUM я уже писал.

1634 / 1135 / 171
Регистрация: 23.07.2010
Сообщений: 6,713
чувак, для начала изучи порядок выполнения предложений в запросе. Много вопросов снимутся сами собой
1898 / 1345 / 273
Регистрация: 14.08.2018
Сообщений: 4,449
Записей в блоге: 4
Регистрация: 16.09.2019
Сообщений: 26

1) JOIN — зачем мне их соединять?
2) толку от GROUP By если у меня нет общего идентификатора?
3) SUM — и так пытался использовать.

Добавлено через 56 секунд
pincet, Проблема не в порядке выполнения запросов, проблема в том что с GROUP BY оно считает также как и без него(неправильно, а вот на сколько неправильно, мне в принципе не важно) и насколько я помню он разделил мне их на 2 строки, а мне нужна 1.

1634 / 1135 / 171
Регистрация: 23.07.2010
Сообщений: 6,713

ЦитатаСообщение от dsadsadas Посмотреть сообщение

FROM Начисление, Снятие;

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

Добавлено через 1 минуту

ЦитатаСообщение от dsadsadas Посмотреть сообщение

толку от GROUP By если у меня нет общего идентификатора?
тут только страдать, что еще
1898 / 1345 / 273
Регистрация: 14.08.2018
Сообщений: 4,449
Записей в блоге: 4

ЦитатаСообщение от dsadsadas Посмотреть сообщение

Начисление.Сумма-Снятие.Итог FROM Начисление, Снятие;

А что тут происходит без ключа? Просто одно вычитается из другого? Да и FROM через одно место написан.
Потому JOIN и ключи для связи, и после этого FROM . JOIN . GROUP BY будет единой сущностью для INSERT . SELECT . SUM() .
Книжки по SQL и базам данных почитай, вопросы отпадут сами собой.

Регистрация: 16.09.2019
Сообщений: 26
Крч я уже сам справился, мне пофиг на ваше мнение, вот ответ:

SELECT (SELECT SUM(Начисление.Сумма) s1 FROM Начисление) - (SELECT SUM(Снятие.Итог) s2 FROM Снятие)

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

Меню пользователя @ qwertehok
Читать блог

1634 / 1135 / 171
Регистрация: 23.07.2010
Сообщений: 6,713

dsadsadas,
страдай, что еще сказать

Добавлено через 4 минуты
qwertehok,

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

Регистрация: 16.09.2019
Сообщений: 26

Вы б предложили что то, вместо того оскорблять меня в криворукости, а так вы просто пытаетесь оскорбить меня а не решить задачу, так что сам страдай, бесполезность.

1634 / 1135 / 171
Регистрация: 23.07.2010
Сообщений: 6,713

ЦитатаСообщение от dsadsadas Посмотреть сообщение

мне пофиг на ваше мнение, вот ответ:
это кто кого оскорбляет, любезный?
Регистрация: 16.09.2019
Сообщений: 26

Если б вы не начали со мной общаться с таким отношением, я бы ответил также нормально, но тк вы начали, заниматься спамом и оскорблениями, вместо помощи, такое отношение и получили.

1898 / 1345 / 273
Регистрация: 14.08.2018
Сообщений: 4,449
Записей в блоге: 4
1634 / 1135 / 171
Регистрация: 23.07.2010
Сообщений: 6,713

ЦитатаСообщение от Andrey-MSK Посмотреть сообщение

наше светлое будущее
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Разница двух столбцов разных таблиц
Помогите пожалуйста Есть две таблицы, которые подключаются через ADO, отражаются в DBGrid1 и 2.

Сложение двух столбцов из разных таблиц
Есть таблица Отели(Id, Название, Тип, Класс, Цена, Тип питания) и есть таблица Питание(Id,Питание.

Объединение двух столбцов разных таблиц
Даны две тыблицы нужно обьединить два столбца в один: SELECT t.name, t_t.name FROM t, t_t WHERE.

Как сложить или вычесть значения из разных таблиц в Access 2010? А конкретно значения столбцов
Как сложить или вычесть значения из разных таблиц в Access 2010? А конкретно значения столбцов Ну.

Создание проверки на совпадение 2 столбцов разных таблиц (непростая)
Подскажите, пожалуйста! Есть в файле эксель три листа, на 1 листе производится итог на 2 и 3.

Сбор в один столбец запроса данных из столбцов 2-х разных таблиц.
Добрый день. Сразу оговорюсь — изменить базу данных не вариант, так как она уже есть и заполнена.

Соединение таблиц

Нередко возникает необходимость в одном запросе получить данные сразу из нескольких таблиц. Для сведения данных из разных таблиц мы можем использовать разные способы. В данной статье рассмотрим не самый распространный, однако довольно простой способ, который представляет неявное соединение таблиц.

Допустим, у нас есть следующие таблицы, которые связаны между собой связями:

CREATE TABLE Products ( Id INT AUTO_INCREMENT PRIMARY KEY, ProductName VARCHAR(30) NOT NULL, Manufacturer VARCHAR(20) NOT NULL, ProductCount INT DEFAULT 0, Price DECIMAL NOT NULL ); CREATE TABLE Customers ( Id INT AUTO_INCREMENT PRIMARY KEY, FirstName VARCHAR(30) NOT NULL ); CREATE TABLE Orders ( Id INT AUTO_INCREMENT PRIMARY KEY, ProductId INT NOT NULL, CustomerId INT NOT NULL, CreatedAt DATE NOT NULL, ProductCount INT DEFAULT 1, Price DECIMAL NOT NULL, FOREIGN KEY (ProductId) REFERENCES Products(Id) ON DELETE CASCADE, FOREIGN KEY (CustomerId) REFERENCES Customers(Id) ON DELETE CASCADE );

Здесь таблицы Products и Customers связаны с таблицей Orders связью один ко многим. Таблица Orders в виде внешних ключей ProductId и CustomerId содержит ссылки на столбцы Id из соответственно таблиц Products и Customers. Также она хранит количество купленного товара (ProductCount) и и по какой цене он был куплен (Price). И кроме того, таблицы также хранит в виде столбца CreatedAt дату покупки.

Пусть эти таблицы будут содержать следующие данные:

INSERT INTO Products (ProductName, Manufacturer, ProductCount, Price) VALUES ('iPhone X', 'Apple', 2, 76000), ('iPhone 8', 'Apple', 2, 51000), ('iPhone 7', 'Apple', 5, 42000), ('Galaxy S9', 'Samsung', 2, 56000), ('Galaxy S8', 'Samsung', 1, 46000), ('Honor 10', 'Huawei', 2, 26000), ('Nokia 8', 'HMD Global', 6, 38000); INSERT INTO Customers(FirstName) VALUES ('Tom'), ('Bob'),('Sam'); INSERT INTO Orders (ProductId, CustomerId, CreatedAt, ProductCount, Price) VALUES ( (SELECT Id FROM Products WHERE ProductName='Galaxy S8'), (SELECT Id FROM Customers WHERE FirstName='Tom'), '2018-05-21', 2, (SELECT Price FROM Products WHERE ProductName='Galaxy S8') ), ( (SELECT Id FROM Products WHERE ProductName='iPhone X'), (SELECT Id FROM Customers WHERE FirstName='Tom'), '2018-05-23', 1, (SELECT Price FROM Products WHERE ProductName='iPhone X') ), ( (SELECT Id FROM Products WHERE ProductName='iPhone X'), (SELECT Id FROM Customers WHERE FirstName='Bob'), '2018-05-21', 1, (SELECT Price FROM Products WHERE ProductName='iPhone X') );

Теперь соединим две таблицы Orders и Customers:

SELECT * FROM Orders, Customers;

При такой выборке каждая строка из таблицы Orders будет соединяться с каждой строкой из таблицы Customers. То есть, получится перекрестное соединение. Например, в Orders три строки, а в Customers то же три строки, значит мы получим 3 * 3 = 9 строк:

Неявное соединение таблиц без JOIN в MySQL

Но вряд ли это тот результат, который хотелось бы видеть. Тем более каждый заказ из Orders связан с конкретным покупателем из Customers, а не со всеми возможными покупателями.

Чтобы решить задачу, необходимо использовать выражение WHERE и фильтровать строки при условии, что поле CustomerId из Orders соответствует полю Id из Customers:

SELECT * FROM Orders, Customers WHERE Orders.CustomerId = Customers.Id;

Соединение таблиц без JOIN в MySQL

Теперь объединим данные по трем таблицам Orders, Customers и Proucts. То есть получим все заказы и добавим информацию по клиенту и связанному товару:

SELECT Customers.FirstName, Products.ProductName, Orders.CreatedAt FROM Orders, Customers, Products WHERE Orders.CustomerId = Customers.Id AND Orders.ProductId=Products.Id;

Так как здесь нужно соединить три таблицы, то применяются как минимум два условия. Ключевой таблицей остается Orders, из которой извлекаются все заказы, а затем к ней подсоединяется данные по клиенту по условию Orders.CustomerId = Customers.Id и данные по товару по условию Orders.ProductId=Products.Id

Соединение таблиц без JOIN в MySQL

В данном случае названия таблиц сильно увеличивают код, но мы его можем сократить за счет использования псевдонимов таблиц:

SELECT C.FirstName, P.ProductName, O.CreatedAt FROM Orders AS O, Customers AS C, Products AS P WHERE O.CustomerId = C.Id AND O.ProductId=P.Id;

Если необходимо при использовании псевдонима выбрать все столбцы из определенной таблицы, то можно использовать звездочку:

SELECT C.FirstName, P.ProductName, O.* FROM Orders AS O, Customers AS C, Products AS P WHERE O.CustomerId = C.Id AND O.ProductId=P.Id;

Как можно суммировать столбцы из 2 таблиц и вывести в сводной?

Есть таблица PRIC 5dd6891c18c0a340677423.pngи таблица
AMO 5dd68990e70f0910938414.png

Как написать запрос, который из таблиц PRIC и AMO выводит следующую информацию:
Имя сотрудника; Общая выплаченная сумма (сумма из первой таблицы и второй)
Но если по одному из сотрудников не было выплат, то в поле с общей выплаченной суммой нужно указывать 0.

  • Вопрос задан более трёх лет назад
  • 334 просмотра

2 комментария

Простой 2 комментария

Silverius16 @Silverius16 Автор вопроса

Просто расчёт зарплат велся в разных таблицах и появилась задача рассчитать общее количество выплат за все время)

erge

Silverius16, В первой таблице записи без дат, во второй с датами. ? Требуется общая сумма по сотруднику, за все время — т.е. все суммы сотрудника просто суммируются или группировка по датам, тогда каждой величине за определенную дату прибавляется величина из таблицы без даты?

Решения вопроса 1

idShura

SELECT a.name sum(a.zarp) FROM (SELECT name, IFNULL(zarp, 0) zarp FROM PRIC union all SELECT name, IFNULL(amount, 0) zarp FROM AMO ) A GROUP BY a.name

Ответ написан более трёх лет назад

erge

в данном запросе в IFNULL нет никакого смысла.
запись либо есть, либо нет, нет записей с NULL выплатой.

idShura

Сергей, откуда такая уверенность что нет записей с NULL выплатой?

В вопросе есть такая строка:

Но если по одному из сотрудников не было выплат, то в поле с общей выплаченной суммой нужно указывать 0.

Из чего можно сделать вывод что в таблице могут быть сотрудники у которых не было выплат, и у них выплаченная сумма может быть 0 или null (автором вопроса это не уточняется).

erge

idShura, это не уверенность, а предположение. потому что если по нормальному — нет выплаты — нет записи.
к тому же оно так и есть смотрите 2007-03-30, нет Маши.

хотя у каждого свое — «нормально».

вопрос конечно с плохими входными данными.
и автор не отвечает на дополнительные вопросы.

Silverius16 @Silverius16 Автор вопроса

Сергей, В таблице есть ячейки с пустыми значениями. Это нужно для того чтобы эти сотрудники тоже отображались в сводной таблице.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *