使用左连接会导致我的记录多次显示

时间:2018-01-05 19:24:34

标签: mysql sql

我在查询中使用左连接,由于某种原因,它多次显示记录。问题似乎是存储帐户的LEFT加入,

因为有4个记录在同一仓库,它显示记录4次。

我的查询是

SELECT portfolioid, cases, bottles, size, trading, Wine_Name, Wine_Vintage,  storageid,dutystatus,packagingtype,rotation,storageid,color, warehouseid,name,
  wines.*,

    wineinfo.*,
    storageaccounts.*
FROM (`portfolio`)
LEFT JOIN wines ON wines.wine_id = portfolio.wine_id
LEFT JOIN storage ON storage.warehouseid = portfolio.storageid
LEFT JOIN storageaccounts ON storageaccounts.warehouse = portfolio.storageid
LEFT JOIN wineinfo ON wineinfo.wine_id = portfolio.wine_id AND wineinfo.Vintage = portfolio.Wine_Vintage
WHERE portfolio.userID = '$userID'

用户将他们的仓库设置在storageaccounts表中,因此这里将具有相同的仓库,但是具有唯一的userID。但是列仓库的某些行将是相同的,

由于这个原因,阻止它显示主记录4次的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

以下是一个可能有用的常规SQL疑难解答过程:

  1. 如果可行,请按表格对列进行投影并使用" tablename.columnname"句法。组出现的顺序应与表格在FROM ... JOIN ...子句中的显示顺序相同。
  2. 将每个列放在SELECT关键字后的一行上。
  3. 添加计算列" 1 AS dummy_start,"作为第一列和" 1 AS dummy_end"作为最后一栏。 (第一个可以与SELECT位于同一行) *注意:我们可以整天争论是否应该在开头或结尾处使用逗号。我一开始就喜欢他们。你做到了。
  4. 最终结果是这样的:

    SELECT 1 AS dummy_start,
           table1.id1
           table1.column11,
           table1.column12,
           table1.column13,
           table2.id2
           table2.column21,
           table2.column22,
           table3.id3
           table3.column31,
           1 AS dummy_end
      FROM table1
     INNER JOIN table2 ON table1.id2 = table2.id2
     INNER JOIN table3 ON table1.id3 = table3.id3
     ORDER BY table1.id1
    

    由于某种原因,您获得了具有相同id1的意外重复行。注释掉对table2和/或table3的所有引用都很简单。我倾向于启动,将所有已连接的表注释掉,然后一次添加一个(即取消注释相关行)。当您看到第一组重复项时,您将知道您刚添加的表是可能的罪魁祸首。