У меня есть две таблицы, которые мне нужно объединить вместе. Слияние будет принимать таблицу дат, добавить ее в таблицу с другой информацией и при этом создать новые записи. Есть ли способ автоматически заполнять новые записи информацией из первой записи. Пример:
Таблица 1:
Tag location Due Date
1 5
Таблица 2:
Date
1/1/17
1/7/17
1/14/17
1/21/17
Когда я сливаюсь, я хочу, чтобы таблица 1 выглядела так:
Tag location Due Date
1 5 1/1/17
1/7/17
1/14/17
1/21/17
и иметь тег # и местоположение # автозаполнение, чтобы каждая новая запись показывала 1 и 5.
Пожалуйста, используйте это. Это отлично работает в mysql Server и MS SQL SERVER
select k.Tag,k.Location,u.Mydate Mydate
from
(
SELECT T1.Tag,
T1.Location,
MIN(T2.MyDate) MyDate
FROM Table1 T1 CROSS JOIN Table2 T2
GROUP BY T1.Tag,
T1.Location
)k
RIGHT JOIN
(
SELECT T1.Tag,
T1.Location,
T2.MyDate
FROM Table1 T1 CROSS JOIN Table2 T2
)u ON k.Tag = u.Tag AND k.Location = u.Location
AND k.MyDate = u.Mydate
/*------------------------
OUTPUT
------------------------*/
Tag Location Mydate
----------- ----------- ----------
1 5 2017-01-01
NULL NULL 2017-01-07
NULL NULL 2017-01-14
NULL NULL 2017-01-21
(4 row(s) affected)
Если я понимаю, что вы имеете в виду, это выполнит эту работу:
CREATE TABLE Table1 (
Tag INT,
Location INT,
DueDate DATE
);
CREATE TABLE Table2 (
MyDate DATE
);
INSERT INTO Table1 VALUES
(1, 5, NULL);
INSERT INTO Table2 VALUES
('2017-01-01'),
('2017-01-07'),
('2017-01-14'),
('2017-01-21');
INSERT INTO Table1 (Tag, Location, DueDate)
SELECT CASE WHEN RN = 1 THEN Tag END,
CASE WHEN RN = 1 THEN Location END,
MyDate
FROM
(
SELECT T1.Tag,
T1.Location,
T2.MyDate,
ROW_NUMBER () OVER (PARTITION BY Tag ORDER BY Tag) AS RN
FROM Table1 T1 CROSS JOIN Table2 T2
) SQ;
DELETE FROM Table1 WHERE DueDate IS NULL;
SELECT *
FROM Table1;
Результаты:
+------+----------+---------------------+
| Tag | Location | DueDate |
+------+----------+---------------------+
| 1 | 5 | 01.01.2017 00:00:00 |
| NULL | NULL | 07.01.2017 00:00:00 |
| NULL | NULL | 14.01.2017 00:00:00 |
| NULL | NULL | 21.01.2017 00:00:00 |
+------+----------+---------------------+
Если вы хотите заполнить столбцы Tag
и Location
, используйте:
INSERT INTO Table1 (Tag, Location, DueDate)
SELECT T1.Tag,
T1.Location,
T2.MyDate
FROM Table1 T1 CROSS JOIN Table2 T2;
DELETE FROM Table1 WHERE DueDate IS NULL;
SELECT *
FROM Table1;
Вы можете использовать кросс-соединение:
SELECT * FROM table1 CROSS JOIN table2
Это объединит каждую строку каждой таблицы в каждую строку в другой таблице. В ограниченном примере, который вы опубликовали, вы получите все разные даты, и тег/местоположение будет повторяться. Если есть два тега/местоположения, вы получите 8 строк, каждая дата появится дважды, и каждая пара тегов/местоположений появится 4 раза и т.д.
Другой пример:
TableA TableB
A 1
B 2
C 3
A cross join B
A1 A2 A3 B1 B2 B3 C1 C2 C3