我在mysql中遇到了查询问题。我创建了2个表,table1和表2.在table1中有2行数据,在table2中它有2行数据,每个表有3个字段。在这种情况下,我想查看视图,这是一个查询:
create view point as select table2.field2 from table1, table2;
我认为它会在table2中显示有2行数据的数据。但结果是显示4行数据,其中每2行是相同的数据。 当我尝试删除table1中的1行时,其意思是删除1个数据,我尝试输入如上所述的查询。结果是正确的,它在table2中显示2行数据。为什么它在table1中有1行数据时是正确的,并且当table1有2行数据时没有。请问如何解决?或者我的错误查询。
答案 0 :(得分:0)
您在这两个表之间使用implicit cross join
。
假设table1
有m
行,table2
有n
行。
然后
SELECT * FROM table1,table2
将返回m*n
行。
以上查询等同于:
SELECT * FROM table1 CROSS JOIN table2
。
如果您希望从table1
和table2
获取所有行,请记住我不需要重复项,那么您需要使用UNION
。
所以,您可能正在寻找此查询:
CREATE VIEW point AS
SELECT table2.field2 from table2
UNION
SELECT table1.field2 from table1
注意:
如果您想在最终结果集中允许重复值,请使用UNION ALL
代替UNION
,如下所示:
CREATE VIEW point AS
SELECT table2.field2 from table2
UNION ALL
SELECT table1.field2 from table1