2016-07-19 76 views
0

我有一个关于查询在MySQL中的问题。我做了2个表,表1和表2.在表1中有2行数据,它在表2中有2行数据,每个表有3个字段。在这种情况下,我想使视图的查询:这是一个错误?或者错误?或者一个错误的查询?

create view point as select table2.field2 from table1, table2; 

我认为它会显示在表2数据的地方有两个数据。但结果是显示4行数据,其中每2行是相同的数据。 当我试图删除表1中的1行,它的意思是删除1个数据,我试着输入上面的查询。结果是正确的,它在table2中显示2行数据。为什么它在table1中有1行数据时正确,当table1有2行数据时没有。请如何解决它?或者我的错误查询。

+0

您的'from'或'Where'子句中没有任何连接条件。基本上,你所执行的是一个笛卡尔连接,在你的'from'子句的每个其他表中的每一行都会显示一行。基本上你看到的是2行* 1行= 2行。 2行* 2行= 4行。您需要为表添加连接条件,例如将主键链接到外键。 – Rook

+0

以前感谢。现在我知道你什么时候像上面的例子那样显示计数。但实际上,我的2个表没有任何连接条件。我只想在table2和table1中取一个值,并在新的视图中显示新的视图。现在我记得,使用视图必须有2个或更多表之间的关系。感谢Rook。 –

回答

0

您在这两个表格之间使用implicit cross join

比方说table1m行和table2n行。

然后

SELECT * FROM table1,table2将返回m*n行。

上述查询等效于此:

SELECT * FROM table1 CROSS JOIN table2

如果您想要获取table1table2的所有行,请记住我不想重复,那么您需要使用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 
+0

我正在尝试,但联合合并2选择方法是一种选择方法,并忽略多个记录数据。 –

+0

是'UNION'实际上合并了从这两个单独查询中删除重复结果的结果。以防万一,如果你想允许重复,然后使用'联合所有'而不是。 – 1000111

相关问题