【问题标题】:How to avoid two results of the same row in join如何避免join中同一行的两个结果
【发布时间】:2013-06-13 19:15:22
【问题描述】:

我实际上在 virturt mart 表上有三张表,一张是 orders,另一张是 item,一张是 order_user_info 要获取用户名,我需要加入 order_user_info

但是当我加入它时,结果信息显示双倍,下面我提到了查询和结果,请指导如何避免双倍结果

*为了加入我在下面提到的查询中使用的名字 *

LEFT JOIN `urbanite_virtuemart_order_userinfos` 作为 Uinfo ON Uinfo.virtuemart_order_id=i.virtuemart_order_id

*完成查询*

SELECT SQL_CALC_FOUND_ROWS o.created_on AS 间隔,CAST(i.`created_on` AS DATE) AS created_on, Uinfo.`first_name`, o.`order_number`, SUM(DISTINCT i.product_item_price * product_quantity) as order_subtotal_netto, SUM(DISTINCT i. product_subtotal_with_tax) 作为 order_subtotal_brutto,COUNT(DISTINCT i.virtuemart_order_id) 作为 count_order_id,SUM(i.product_quantity) 作为 product_quantity FROM `urbanite_virtuemart_order_items` 作为 i LEFT JOIN `urbanite_virtuemart_orders` as o ON o.virtuemart_order_id=i.virtuemart_order_id LEFT JOIN `urbanite_virtuemart_order_userinfos` 作为 Uinfo ON Uinfo.virtuemart_order_id=i.virtuemart_order_id AND Uinfo.created_on = i.created_on AND Uinfo.virtuemart_user_id = o.virtuemart_user_id WHERE (`i`.`order_status` = "S") AND i.virtuemart_vendor_id = "63" AND DATE(o.created_on) BETWEEN "2013-06-01 05:00:00" AND "2013-06-30 05 :00:00" 按间隔分组 ORDER BY created_on DESC LIMIT 0, 400

我得到的结果如下所示

intervals | Created_on | order_no | order_subtotalnetto | order_subtotalbruto | count_order_id | product_quantity

2013-06-12 09:47:16 |2013-06-12 | 43940624 | 200.00000 | 200.00000 | 1 | 2

我得到的结果如下所示加入名字

intervals | Created_on | order_no | f_name | order_subtotalnetto | order_subtotalbruto | count_order_id | product_quantity

2013-06-12 09:47:16 |2013-06-12 |法廷·博哈里 | 43940624 | 200.00000 | 200.00000 | 1 | 4

在不加入名字的情况下看到它显示 product_quantity = 2 但是当我加入时它显示值加倍,我尝试了不同但不能这样,因为它每次都显示产品数量 = 1

需要救援!

【问题讨论】:

  • 请谨慎使用粗体字体...
  • 如果您可以在sqlfiddle.com 上提供带有数据库架构的 sqlfiddle 会有所帮助
  • 如果您有一个额外的名字连接,您可以删除它并使用子选择来代替。类似于 select a.*, (select b.name from table_b b where b.refid = a.id) as name from table_a a
  • 感谢@RubenVerschueren,您的评论对我有帮助
  • 也感谢@MicKri 现在我在 sqlfiddle 上创建方案时发现了这个问题,感谢您的帮助。

标签: mysql sql joomla2.5 virtuemart


【解决方案1】:

哦,实际上行在 urbanite_virtuemart_order_userinfos 表中出现了两次,所以我使用了 where 子句并且它有效

WHERE (`i`.`order_status` = "S") AND i.virtuemart_vendor_id = "63" AND DATE(o.created_on) BETWEEN "2013-06-01 05:00:00" AND "2013-06 -30 05:00:00" AND Uinfo.`address_type` = 'BT'

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 2021-01-30
    相关资源
    最近更新 更多