我希望我的结果看起来像这样
FirstName1 LastName1 FirstName2 LastName2
Amy Smith Bob Stone
Fred Joker Gina White
其中FirstName1和FirstName2具有相同的数据类型,但我无法用于加入(假设没有人具有相同的名称),LastName1和LastName2也是如此。
我试图创建2个表。第一个表包含FirstName1和LastName1。第二个表包含Firstname2和LastName2。
然后我用
SELECT table1.FirstName1, table1.LastName1, table2.FirstName2, table2.LastName2
FROM table1, table2;
但这给了我很多重复。有什么建议?
答案 0 :(得分:3)
SELECT t1.FirstName1, t1.LastName1, t2.FirstName2, t2.LastName2
FROM
(SELECT
FirstName1,
LastName1,
ROW_NUMBER() OVER (ORDER BY FirstName1) 'RowNumber'
FROM table1
) AS t1
FULL OUTER JOIN
(SELECT
FirstName2,
LastName2,
ROW_NUMBER() OVER (ORDER BY FirstName2) 'RowNumber'
FROM table2
) AS t2
ON t1.RowNumber = t2.RowNumber
FULL OUTER JOIN
将处理两个表中的行数不相同的情况。
答案 1 :(得分:0)
你永远不应该做你想做的事情,但要尝试使用DISTINCT
SELECT Distinct
table1.FirstName1,
table1.LastName1,
table2.FirstName2,
table2.LastName2
FROM table1, table2;
您的方法存在的问题是检索到的数据集没有任何意义。你为什么要这样做呢?
编辑:您可以随时执行此操作:
select table1.FirstName1, table1.LastName1, table2.FirstName2, table2.LastName2
from table1, table2
where table1.rownum= table2.rownum;
答案 2 :(得分:0)
“哦哈哈,我真的只是想让它看起来很漂亮。我已经习惯了 用C和Java编程,各种输出都很漂亮 可能。 “
数据库编程是不同的。在这个领域中,内容比仅仅漂亮更重要。因此,当涉及到结果集时,数据库会坚持一行中的所有列共享一个有意义的关系(线索在名称,关系数据库中)。
您的问题是,您没有没有共同密钥的表,因此无法将两组行连接在一起。如果没有合适的WHERE子句,数据库就会实现交叉连接,即笛卡尔积,这就是所有复制的来源。
鉴于你没有有意义的钥匙,你唯一的选择是假装它们; the approach shown by Vikdor是实现这一目标的一种方式。