【问题标题】:Joining 2 Queries without Common Column Fields in SQL?在 SQL 中加入 2 个没有公共列字段的查询?
【发布时间】:2021-09-27 18:09:23
【问题描述】:

我的问题是参考了类似的帖子: Joining tables without a common column in sql server

我有 2 个查询,每个查询引用不同的表,因此查询没有公共列字段。

我想将这 2 个查询连接在一起。让我们以 2 个查询具有以下数据为例:

查询1

Test1           Test2
-----------     -------------
A               1
B               2
C               3

查询2

Test3           Test4
-----------     -------------
D               4
E               5
F               6

预期的查询 3:

Test1           Test2             Test3            Test4
-----------     -------------     -------------    -------------
A               1                                     
B               2                                     
C               3                  
                                  D                4
                                  E                5
                                  F                6

此处引用了对类似帖子提供的答案:Using Full Outer Join

我已经尝试过这样的推荐解决方案:

SELECT Query1.Test1, Query1.Test2, Query2.[Test3], Query2.[Test4]
FROM Query1
FULL OUTER JOIN Query2 ON 0 = 1;

但是,我在 Microsoft Access 中收到一条错误消息:

Syntax error in FROM clause.

有人可以就我做错了什么以及解决方案给我一些指导吗?

【问题讨论】:

  • 你尝试过交叉连接吗?

标签: sql


【解决方案1】:

您正在尝试Full Outer Join,但它在MySQL 上不存在。 我们可以通过对左连接和右连接进行 UNION 来模拟它

试试:

create table query1(
  test1 varchar(5), 
  test2 int(3)  );

insert into query1 values ( 'A', 1),( 'B', 2),( 'C', 3);

create table query2(
  test3 varchar(5), 
  test4 int(3)  );

insert into query2 values ( 'D', 4),( 'E', 5),( 'F', 6);



SELECT *
FROM `query1` as `t1`
LEFT OUTER JOIN `query2` as `t2` ON `t1`.`test1` = `t2`.`test3`   
UNION  
SELECT *
FROM `query1` as `t1`
RIGHT OUTER JOIN `query2` as `t2` ON `t1`.`test1` = `t2`.`test3` ;

演示:https://www.db-fiddle.com/f/7yUJcuMJPncBBnrExKbzYz/69

【讨论】:

  • 抱歉打错标签,现在更新了,应该是SQL
  • @Pangu 你指的是哪个RDBMS SQL
  • 还想补充一点,Test1Test2 不是同一种数据类型,这只是我使用的一个示例。
  • @Pangu 没关系,LEFT OUTER JOIN 会返回左表的所有记录,RIGHT OUTER JOIN 会返回右表的所有记录,最后你做一个@987654330 @所有数据。您可以根据自己的价值观尝试并告诉我
  • 我为胖手指道歉,我想说Test1Test3 因为我看到你使用了test1 = t2.test3。我认为这给了我一个Type mismatch in expression 错误。
【解决方案2】:

如果您想要确切的最终列结构,您可以使用联合,但首先您应该编辑您的查询,在第一个查询中为“Test3”和“Test4”添加 2 个空值,在第二个查询中为“Test1”和“Test2”添加 2 个空值.

第一次查询

SELECT Test1, Test2, '' as Test3, '' as Test4 FROM someTable

第二次查询

SELECT '' as Test1, '' as Test2, Test3, Test4 FROM someTable

然后你可以做UNION

Query1 

UNION

Query2

【讨论】:

  • 我在Query3 中尝试了您的建议,但我收到一条错误消息,指出The SELECT statement includes a reserved word or an argument name that is misspelled or missing, or the punctuation is incorrect。我实际上将SELECT 语句和UNION 合并到我的Query3 中,而不是修改原始的Query1Query2。有关系吗?
  • 您能发布您的查询吗?
  • @Pangu 如果单独的查询效果很好,那么只需将它们用括号括在 UNION 中:( {Query 1 text} ) UNION ALL ( {Query 2 text} )
  • @SergioRinaudo 查询 3:SELECT Test1, Test2, '' As Test3, '' As Test4 FROM Query1 UNION SELECT '' As Test1, '' As Test2, Test3, Test4 FROM Query2;
猜你喜欢
  • 2015-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-16
  • 2013-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多