我偶然发现了下面的sql-code(为了示例目的而翻译):
SELECT m.username, c.companyname
FROM member m , company c
WHERE m.id = 5 AND c.id = 10;
表成员的id
为PK。公司有id
作为PK。这两个表之间没有关系。
起初我并不认为这会起作用,但确实如此。
结果是一行,其值为username
和companyname
。
在我看到这个解决方案之前,我会选择2个sql - 一个用于member
,另一个用于company
。
这个SQL有什么危险?
答案 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,你只有结果。