我想并排連接兩個不同的表而不會丟失表中的任何行,結果不應該是交叉連接。
為 t1 創建表查詢:
CREATE TABLE IF NOT EXISTS t1 (
`i` INT,
`foo` INT);
INSERT INTO t1 VALUES
(1,1),
(2,2),
(3,3),
(4,4);
t1 表的輸出是:
i foo
1 1
2 2
3 3
4 4
為日期表創建表查詢:
CREATE TABLE IF NOT EXISTS dates (
`User` VARCHAR(2) CHARACTER SET utf8,
`start_date` date,
`end_date` date
);
INSERT INTO dates VALUES
('U1','2020-01-01','2020-01-31'),
('U2','2020-01-16','2020-01-26'),
('U3','2020-01-28','2020-02-06');
日期表的輸出是:
User start_date end_date
U1 2020-01-01 2020-01-31
U2 2020-01-16 2020-01-26
U3 2020-01-28 2020-02-06
但我想要這樣的輸出:t1 和日期表并排
i foo User start_date end_date
1 1 U1 2020-01-01 2020-01-31
2 2 U2 2020-01-16 2020-01-26
3 3 U3 2020-01-28 2020-02-06
4 4 null null null
uj5u.com熱心網友回復:
關系代數不能以這種方式作業,因此正常的連接和聯合不會產生您想要的結果。
但是,您可以使用ROW_NUMBER(). 例如:
with a as (
select *, row_number() over() as rn from t1
),
b as (
select *, row_number() over() as rn from dates
)
select a.i, a.foo, b.User, b.start_date, b.end_date
from a left join b on a.rn = b.rn
注意:上面的解決方案假設a行數多于b. 如果這不是給定的查詢將需要一個完整的連接,不幸的是 MySQL 沒有實作。然而,它可以用左連接和反連接來模擬。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/355526.html
