SQL连接表(a,b)-但仅连接表中的行

SQL连接表(a,b)-但仅连接表中的行,sql,magento,join,Sql,Magento,Join,我想加入两个表sales\u flat\u order和sales\u flat\u order\u address。我想使用一个表中的实体\u id与另一个表中的父\u id匹配。现在每个实体id有一行,但每个父实体id有两行。但我只想在连接后有一行 我正在使用这个语句,但在连接之后,它仍然为每个实体返回两行 select o.customer_email, a.prefix from sales_flat_order o left JOIN sales_flat_order_address

我想加入两个表sales\u flat\u order和sales\u flat\u order\u address。我想使用一个表中的实体\u id与另一个表中的父\u id匹配。现在每个实体id有一行,但每个父实体id有两行。但我只想在连接后有一行

我正在使用这个语句,但在连接之后,它仍然为每个实体返回两行

select o.customer_email, a.prefix
from sales_flat_order o
left JOIN sales_flat_order_address a on o.entity_id = a.parent_id
有人有想法吗?

只需添加一个不同的

select DISTINCT o.customer_email, a.prefix
from sales_flat_order o
left JOIN sales_flat_order_address a on o.entity_id = a.parent_id
显然,这只会删除o.customer_email、a.prefix实际上相同的多行,否则您需要找到某种方法来确定您实际需要的记录。。。例如:

select o.customer_email, MIN(a.prefix)
from sales_flat_order o
left JOIN sales_flat_order_address a on o.entity_id = a.parent_id
group by o.customer_email 

这样,如果设置了计费地址,您将从计费地址获取前缀,如果未设置计费地址,则返回到发货地址。

为什么有两行,它们有什么不同,以及如何知道哪一行是a。您希望返回的前缀值?@SpectralGhost:这是magento数据库架构。通常有两个地址行:账单和发货。是的,谢谢!这个似乎就是我要找的。我现在正在查。但是计算语句需要我的sql客户机。我的电脑工作了40分钟。。。这正常吗?与内部联接相比,左联接使用更少的执行时间,并且您没有指定表大小或它包含多少行。最好检查联接条件中使用的列的索引。如果答案正确或对您有帮助,请对其进行评分。销售订单在200k左右没有那么多行。或者你认为这太多了吗?检查列的索引到底意味着什么?如果u r表没有索引,那么数据就是堆,没有预先计划的机制来检索数据。在这种情况下,获取数据需要很多时间。这在我的情况下发生过很多次。即使要获得最大值或最小值,如果有大量数据且表中不包含索引,也至少需要2分钟。
select o.customer_email, 
     a.prefix 
from sales_flat_order o 
 left JOIN (Select  distinct a.prefix, a.parentid 
            from sales_flat_order_address) a
 on o.entity_id = a.parent_id
SELECT  o.customer_email, oa.prefix
FROM    sales_flat_order o
LEFT JOIN
        sales_flat_order_address oa
ON      oa.entity_id =
        (
        SELECT  entity_id
        FROM    sales_flat_order_address oai
        WHERE   oai.parent_id = o.entity_id
        ORDER BY
                FIND_IN_SET(address_type, 'billing,shipping')
        LIMIT 1
        )