一个选择,两个表,没有连接

时间:2014-11-11 14:17:11

标签: sql join

我偶然发现了下面的sql-code(为了示例目的而翻译):

SELECT m.username, c.companyname 
FROM member m , company c 
WHERE m.id = 5 AND c.id = 10;

表成员的id为PK。公司有id作为PK。这两个表之间没有关系。 起初我并不认为这会起作用,但确实如此。

结果是一行,其值为usernamecompanyname

在我看到这个解决方案之前,我会选择2个sql - 一个用于member,另一个用于company

这个SQL有什么危险?

2 个答案:

答案 0 :(得分:3)

此SQL等同于:

SELECT m.username, c.companyname
FROM member m CROSS JOIN company c
WHERE m.id = 5 AND c.id = 10;

逗号和cross join生成笛卡尔积。 where子句可能是从每个表中选择一行。我更喜欢CROSS JOIN方法并且有一个简单的规则:永远不要在from子句中使用逗号。

答案 1 :(得分:0)

如果您从多个表中选择而不加入它们,则会获得所有可能的组合。在这种情况下,由于两侧的pk,你只有结果。