大佬教程收集整理的这篇文章主要介绍了表上的 SQL 联接,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
试图加入这些表以获得所需的列(见图 1),但在第三个条目之后,我得到了重复的行。所以我的问题是对 ID 值的内部连接会解决这个问题吗?
来自...
SELEct m.make,m.model,car.price,color.color,car.mileage,carlot.lotID
from makemodel as m,color,carlot,car;
您实际上需要在 hwich 下指定应连接行的条件。
你写的是……
color
表中的每一行连接carlot
表中的每一行结合car
表中的每一行结合这被称为 CROSS JOIN
或“笛卡尔积”。
为避免此类错误,请勿使用 ,
将表连接在一起。请改用 JOIN
语法。 (近 30 年前被采用为 ANSI-92 标准。您使用的语法已经过时了近 3 年。)
SELECT
m.make,m.model,car.price,color.color,car.mileage,carlot.lotid
FROM
makemodel as m
INNER JOIN
car
ON car.mmid = m.mmid
INNER JOIN
color
ON color.colorid = car.colorid
INNER JOIN
carlot
ON carlot.carid = car.carid
,
您没有在此处使用 join。您正在使用 4 个表的 cartesian product(或 cross join)。所以每一行的所有值都会被复制。
您需要添加 where 子句并在那里加入:
SELEct m.make,carlot.lotid
from makemodel as m,color,carlot,car
where m.mmid=car.mmid and car.colorid=color.colorid and carlot.carid=car.carid
;
正如@Ken White 所建议的那样,最好在此处使用连接语法。我不同意逗号分隔是不好的做法,它有它的用途,但事实并非如此。
您可以将查询重写为
SELEct m.make,carlot.lotid
from car
join makemodel as m ON m.mmid=car.mmid
join color ON car.colorid=color.colorid
join carlot ON carlot.carid=car.carid
这将使意图更清晰,代码更具可读性。现在我们可以看到 car 是主表。
此外,如果您使用的是上帝遗弃的 MySQL(我的意思是在我看来它是非常糟糕的数据库),那么它具有自然连接的功能,您可以将其重写如下:
SELEct m.make,carlot.lotid
from car
natural join makemodel as m
natural join color
natural join carlot
它会自动连接同名的列。也许此功能会诱使您编写以逗号分隔的表格。当列在不同表中具有相同名称时,此功能很有用,但它是有争议的,因为从代码中不清楚如何执行连接。我建议不要过多依赖此功能。
以上是大佬教程为你收集整理的表上的 SQL 联接全部内容,希望文章能够帮你解决表上的 SQL 联接所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。