Mysql 组合select查询的结果而不使用集合运算符(UNION)
如果不使用union运算符组合sql中的查询结果(其工作原理与union/union all相同),是否有可能呢Mysql 组合select查询的结果而不使用集合运算符(UNION),mysql,sql,Mysql,Sql,如果不使用union运算符组合sql中的查询结果(其工作原理与union/union all相同),是否有可能呢 CREATE TABLE Table1 (`id` int, `name` varchar(32)); CREATE TABLE Table2 (`id` int, `name` varchar(32)); 和样本数据 表1: | ID | NAME | |----|-------| | 1 | name1 | | 2 | name2 | | 3 | name3 | 输出:
CREATE TABLE Table1
(`id` int, `name` varchar(32));
CREATE TABLE Table2
(`id` int, `name` varchar(32));
和样本数据
表1:
| ID | NAME |
|----|-------|
| 1 | name1 |
| 2 | name2 |
| 3 | name3 |
输出:
| ID | NAME |
|----|--------|
| 1 | name1 |
| 2 | name2 |
| 3 | name3 |
| 11 | name11 |
| 22 | name22 |
| 33 | name33 |
| 1 | name1 |
| ID | NAME |
|----|--------|
| 1 | name1 |
| 2 | name2 |
| 3 | name3 |
| 11 | name11 |
| 22 | name22 |
| 33 | name33 |
输出:
| ID | NAME |
|----|--------|
| 1 | name1 |
| 2 | name2 |
| 3 | name3 |
| 11 | name11 |
| 22 | name22 |
| 33 | name33 |
| 1 | name1 |
| ID | NAME |
|----|--------|
| 1 | name1 |
| 2 | name2 |
| 3 | name3 |
| 11 | name11 |
| 22 | name22 |
| 33 | name33 |
|ID |名称|
|----|--------|
|1 |名称1|
|2 |名称2|
|3 |名称3|
|11 |姓名11|
|22 |姓名22|
|33 |姓名33|
这里是演示让我们假设您有两个表要联合
CREATE TABLE Table1
(`id` int, `name` varchar(32));
CREATE TABLE Table2
(`id` int, `name` varchar(32));
和样本数据
表1:
| ID | NAME |
|----|-------|
| 1 | name1 |
| 2 | name2 |
| 3 | name3 |
输出:
| ID | NAME |
|----|--------|
| 1 | name1 |
| 2 | name2 |
| 3 | name3 |
| 11 | name11 |
| 22 | name22 |
| 33 | name33 |
| 1 | name1 |
| ID | NAME |
|----|--------|
| 1 | name1 |
| 2 | name2 |
| 3 | name3 |
| 11 | name11 |
| 22 | name22 |
| 33 | name33 |
输出:
| ID | NAME |
|----|--------|
| 1 | name1 |
| 2 | name2 |
| 3 | name3 |
| 11 | name11 |
| 22 | name22 |
| 33 | name33 |
| 1 | name1 |
| ID | NAME |
|----|--------|
| 1 | name1 |
| 2 | name2 |
| 3 | name3 |
| 11 | name11 |
| 22 | name22 |
| 33 | name33 |
|ID |名称|
|----|--------|
|1 |名称1|
|2 |名称2|
|3 |名称3|
|11 |姓名11|
|22 |姓名22|
|33 |姓名33|
下面是演示我们尝试并得到了简单的查询,但我不知道这有多有效
CREATE TABLE tableA
( col1 INTEGER , col2 INTEGER
);
CREATE TABLE tableB
( col1 INTEGER , col2 INTEGER
)
// insert statements
INSERT INTO tableA
(COL1, COL2
) VALUES
(12, 13
);
INSERT INTO tableA
(COL1, COL2
) VALUES
(14, 15
);
INSERT INTO tableB
(COL1, COL2
) VALUES
(12, 13
);
INSERT INTO tableB
(COL1, COL2
) VALUES
(14, 15
);
// for union all
SELECT (
CASE
WHEN b.col1 IS NULL
THEN a.col1
ELSE b.col1
END)
FROM
(SELECT COL1 FROM TableB
)b
FULL OUTER JOIN
(SELECT COL1 FROM TableA
) a
ON 1=2
// for union
SELECT (
CASE
WHEN b.col1 IS NULL
THEN a.col1
WHEN b.col1=a.col1
THEN b.col1
ELSE b.col1
END)
FROM
(SELECT COL1 FROM TableB
)b
FULL OUTER JOIN
(SELECT COL1 FROM TableA
) a
ON a.col1=b.col1
我们尝试并得到了简单的查询,但我不知道这有多有效
CREATE TABLE tableA
( col1 INTEGER , col2 INTEGER
);
CREATE TABLE tableB
( col1 INTEGER , col2 INTEGER
)
// insert statements
INSERT INTO tableA
(COL1, COL2
) VALUES
(12, 13
);
INSERT INTO tableA
(COL1, COL2
) VALUES
(14, 15
);
INSERT INTO tableB
(COL1, COL2
) VALUES
(12, 13
);
INSERT INTO tableB
(COL1, COL2
) VALUES
(14, 15
);
// for union all
SELECT (
CASE
WHEN b.col1 IS NULL
THEN a.col1
ELSE b.col1
END)
FROM
(SELECT COL1 FROM TableB
)b
FULL OUTER JOIN
(SELECT COL1 FROM TableA
) a
ON 1=2
// for union
SELECT (
CASE
WHEN b.col1 IS NULL
THEN a.col1
WHEN b.col1=a.col1
THEN b.col1
ELSE b.col1
END)
FROM
(SELECT COL1 FROM TableB
)b
FULL OUTER JOIN
(SELECT COL1 FROM TableA
) a
ON a.col1=b.col1
+1-我花了一些时间来理解您使用信息方案的内容(以及原因)。非常好的解决方案。太棒了,真的很容易理解+1-我花了一些时间来理解您使用信息方案的内容(以及原因)。非常好的解决方案。太棒了,真的很容易理解!请分享您的宝贵评论您的原始问题被MySQL标记,MySQL中没有实现
完全连接
。是的,我同意。。。但我们也可以在MySQL中使用完全外部连接,但语法会有所不同think@Basu考虑到您最初的需求,您自己的答案是不正确的,因为MySql没有完全外部连接
,除非您有其他MySql解决方案。这不符合SO规则。问一个问题,然后回答另一个问题,并且不接受针对您原始需求集给出的答案…好的,对不起,我错误地提到了MySql。请分享您的宝贵评论您的原始问题是用MySql标记的,并且MySql中没有实现完全连接
。是的,我同意。。。但我们也可以在MySQL中使用完全外部连接,但语法会有所不同think@Basu考虑到您最初的需求,您自己的答案是不正确的,因为MySql没有完全外部连接
,除非您有其他MySql解决方案。这不符合SO规则。问一个问题,然后回答另一个问题,并且不接受对您最初的需求集给出的答案…好的,对不起,我错误地提到了MySql。