为什么重复值出现在SQL结果中

约翰

我对加入有疑问。例如,使用示例数据库dvdrental,此查询:

SELECT customer.customer_id
       , first_name
       , last_name
FROM customer 
INNER JOIN payment ON Customer.customer_id = Payment.customer_id

有些记录会重复出现,例如,它出现了3次“ 342 Harold Martino”,例如:

342   Harold   Martino

342   Harold   Martino

342   Harold   Martino

您是否知道为什么出现重复的记录(如本例中所示)出现相同的记录3次?此重复意味着付款表中有3条记录,其中customer_id = 342?但是,此查询“从customer_id = 342的付款中选择* *”返回32条记录。因此,我无法正确理解联接的工作方式。

克里斯·谢勒

与此相关的资源很多,因此简而言之,您的表情用简单的英语来表达:

从客户表中获取所有记录,然后为每个记录获取customer_Id字段中具有相同值的每个付款记录为每个付款记录返回一行,该行复制客户记录中付款记录中每一行的所有字段。最后,仅返回3列:

  • 表中customer_idcustomer
  • first_name是在的一列customerpayment
  • last_name是在的一列customerpayment

请注意,我们没有从payment表中带回任何列...(我假设first_name和last_name是customer中的字段...)

请记住,CROSS JOIN(或a FULL OUTER JOIN)是一个联接,表示从左侧获取所有字段并创建一个与右侧相乘的单行组合,因此对于左侧的每一行,请返回左侧行的组合每行都在右边。因此,a中返回的行CROSS JOIN数是当前表中的行数乘以联接表中的行数

在查询中,INNER JOINLEFT INNER JOIN将产生一个记录集,其中包括当前表结构中的所有字段,并且还将包括联接表中的字段 LEFT组件规定,只有符合现有的表结构的记录应返回,所以在这种情况下,仅Payment记录了那场比赛一customer_id在当前没有过滤customer表将被退回。

结果行数是联接表中在当前表中具有匹配项的行数


相反,如果要查询:

选择所有有付款的客户

那么您可以使用联接,但还应该使用DISTINCT子句,以仅返回唯一记录:

SELECT DISTINCT customer.customer_id
       , first_name
       , last_name
FROM customer 
INNER JOIN payment ON Customer.customer_id = Payment.customer_id

一种替代方法是使用子查询而不是联接:

SELECT customer_id
       , first_name
       , last_name
FROM customer 
WHERE EXISTS (SELECT customer_id FROM payment WHERE payment.customer_id = customer.customer_id)

关于何时使用一种查询样式而不是另一种查询样式的规则非常复杂,并且非常取决于每个表中的行数,可用索引的类型,甚至是您在其中运行的RDBMS的类型或版本。

为了优化,请运行两个查询,比较结果和时间,然后使用更适合您的数据库的查询。如果以后的性能成为问题,请尝试另一种:)

选择Customer_id领域

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是什么导致重复的行出现在SQL中?

来自分类Dev

为什么应用程序重复项出现在菜单中?

来自分类Dev

为什么软删除的实体会出现在查询结果中?

来自分类Dev

为什么 URL 出现在我使用 SPARQL 的查询结果中?

来自分类Dev

重复值出现在“自动完成” jQuery中

来自分类Dev

为什么我的列值未出现在jQuery数据表导出中?

来自分类Dev

为什么输入#名称会出现在输出中?

来自分类Dev

为什么动画不出现在模态/灯箱中?

来自分类Dev

为什么glxgears不出现在xlsclients中?

来自分类Dev

为什么所有这些重复项都出现在Xcode自动完成中?

来自分类Dev

为什么像 -1.7e+007 这样的数字会出现在结果中?[科学计数法]

来自分类Dev

可选出现在结果中

来自分类Dev

为什么相关的帖子小部件仅出现在页脚部分,而没有出现在侧边栏中?

来自分类Dev

为什么这些活动记录查询结果会出现在我的视图中?

来自分类Dev

值未出现在Datagrid中?

来自分类Dev

为什么链接在HTML中的链接之后,为什么出现在表格的前面?

来自分类Dev

删除出现在不同列中的重复值,但顺序不同

来自分类Dev

为什么 Json 对象出现在下面的 Json 值之前?

来自分类Dev

为什么代码没有出现在html中?...在Rails中

来自分类Dev

在R中,为什么变量名称以'。'开头 没有出现在我的环境中?

来自分类Dev

为什么线条在我的SVG元素中没有出现在我的圈子中

来自分类Dev

为什么YAML中的Rmarkdown Dynamic TITLE没有出现在pdf文件中

来自分类Dev

为什么XSL:VARIABLE Node没有出现在我的XML文件中?

来自分类Dev

为什么我的Swift struct属性没有出现在框架中?

来自分类Dev

为什么字符串没有出现在WPML的“字符串翻译”中?

来自分类Dev

为什么我的git merge没有出现在存储库中?

来自分类Dev

为什么`merit_actions`出现在查询中而未指定?

来自分类Dev

为什么Scalaz出现在我的项目的API文档中?

来自分类Dev

为什么mdf文件没有出现在App_Data文件夹中?

Related 相关文章

  1. 1

    是什么导致重复的行出现在SQL中?

  2. 2

    为什么应用程序重复项出现在菜单中?

  3. 3

    为什么软删除的实体会出现在查询结果中?

  4. 4

    为什么 URL 出现在我使用 SPARQL 的查询结果中?

  5. 5

    重复值出现在“自动完成” jQuery中

  6. 6

    为什么我的列值未出现在jQuery数据表导出中?

  7. 7

    为什么输入#名称会出现在输出中?

  8. 8

    为什么动画不出现在模态/灯箱中?

  9. 9

    为什么glxgears不出现在xlsclients中?

  10. 10

    为什么所有这些重复项都出现在Xcode自动完成中?

  11. 11

    为什么像 -1.7e+007 这样的数字会出现在结果中?[科学计数法]

  12. 12

    可选出现在结果中

  13. 13

    为什么相关的帖子小部件仅出现在页脚部分,而没有出现在侧边栏中?

  14. 14

    为什么这些活动记录查询结果会出现在我的视图中?

  15. 15

    值未出现在Datagrid中?

  16. 16

    为什么链接在HTML中的链接之后,为什么出现在表格的前面?

  17. 17

    删除出现在不同列中的重复值,但顺序不同

  18. 18

    为什么 Json 对象出现在下面的 Json 值之前?

  19. 19

    为什么代码没有出现在html中?...在Rails中

  20. 20

    在R中,为什么变量名称以'。'开头 没有出现在我的环境中?

  21. 21

    为什么线条在我的SVG元素中没有出现在我的圈子中

  22. 22

    为什么YAML中的Rmarkdown Dynamic TITLE没有出现在pdf文件中

  23. 23

    为什么XSL:VARIABLE Node没有出现在我的XML文件中?

  24. 24

    为什么我的Swift struct属性没有出现在框架中?

  25. 25

    为什么字符串没有出现在WPML的“字符串翻译”中?

  26. 26

    为什么我的git merge没有出现在存储库中?

  27. 27

    为什么`merit_actions`出现在查询中而未指定?

  28. 28

    为什么Scalaz出现在我的项目的API文档中?

  29. 29

    为什么mdf文件没有出现在App_Data文件夹中?

热门标签

归档