【问题标题】:Trying to "add" one column to a table via SQL JOIN尝试通过 SQL JOIN 将一列“添加”到表中
【发布时间】:2009-10-14 14:20:14
【问题描述】:

我想将两个表连接在一起,并且只有表 1 中的数据(但每条记录),并在适用的情况下从另一个表的列中添加数据(每条记录都不会匹配)

我尝试使用匹配四列的 LEFT JOIN,但我得到了一些记录的双倍。如果表 1 中有 1050 条记录,我希望返回 1050 条记录,但我得到的不止这些。

部分问题在于没有任何索引列,因为每列都有在整个列中重复的值。

无论如何,这是我尝试的 SQL 语句,但我得到了四个额外的记录(重复)

SELECT t1.*, t2.assignedtechnician
FROM idlereport AS t1
LEFT JOIN wipassignedtechnician AS t2
ON (LEFT(t1.rma, 6)=LEFT(t2.rma, 6)
AND t1.receiveddate=t2.receiveddate
AND t1.serial=t2.serial
AND t1.partnumber=t2.partnumber)

附:我正在使用 MySQL

【问题讨论】:

    标签: mysql join


    【解决方案1】:

    问题是,根据您指定的连接条件,有时 t2 中有多个记录与 t1 中的单个记录匹配...

    SELECT t1.*, Min(t2.assignedtechnician)
    FROM idlereport AS t1
       LEFT JOIN wipassignedtechnician AS t2
           ON (LEFT(t1.rma, 6)=LEFT(t2.rma, 6)
               AND t1.receiveddate=t2.receiveddate
               AND t1.serial=t2.serial 
               AND t1.partnumber=t2.partnumber)
    Group By t1.*
    

    SELECT t1.*, 
        (Select Min(t2.assignedtechnician)
         From wipassignedtechnician 
         Where LEFT(rma, 6)=LEFT(t1.rma, 6)
               AND receiveddate=t1.receiveddate
               AND serial=t1.serial 
               AND partnumber=t1.partnumber) assignedtechnician
    FROM idlereport AS t1
    

    【讨论】:

    • 第一个只返回一行?但是第二个有效,我没有想到子查询,还是新的。谢谢
    【解决方案2】:

    在这种情况下,左连接是右连接,我想您的问题是您的问题。为什么要加入字符串列而不是某些索引?

    尽管如此,您的左表中的行数永远不应超过 (idlereport)

    【讨论】:

    • 如果idlereportwipassignedtechnician 中有多个匹配条目,您可以轻松获得更多行(例如,每个报告有多个技术人员)。
    • 当我开始学习数据库时,我并没有真正意识到索引表的重要性,并且由于没有包含所有唯一值的列,所以我没有创建一个。每列中都有重复的值,但实际上没有记录本身是重复的。我不确定使用数字索引是否会有所帮助,但如果这个问题“无法回答
    猜你喜欢
    • 2018-05-17
    • 2012-02-20
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    相关资源
    最近更新 更多