左连接表给出了不必要的额外行

时间:2016-04-21 18:57:53

标签: sql sql-server sql-server-2008

美好的一天。

我正在针对两个表(表A和表B)编写查询。

表A有57行。结果应始终与表A的行数相同。

表B有44行。

SCRIPT

;WITH ss 
     AS (SELECT DISTINCT * 
         FROM   TableA), 
     ss2 
     AS (SELECT DISTINCT * 
         FROM   TableB) 
SELECT DISTINCT a.lotid, a.name,
                b.machine_id 
FROM   ss a 
       LEFT JOIN ss2 b 
              ON b.recipe_id = a.id 
WHERE b.machine_id = 1

表A

           id   lotid   name
            62  FR 3    2000W - 200W/ms 
            63  FR 3    2000W - 180W/ms 
            85  FR 2    2000W - 173W/ms 
            87  FR 2    1200W - 173W/ms 
            197 FR 2    1100W - 185W/ms 
            200 FR 2    2000W - 185W/ms 
            204 FR 2    1200W - 41W/ms  
            218 FR 5    Kst / Test  
            220 FR 5    2000W - 29W/ms  
            221 FR 4    2000W - 185W/ms 
            222 FR 5    2000W - 185W/ms 
            223 FR 2    N2000W - 200W/ms    
            224 FR 3    2000W - 185W/ms 
            225 FR 5    2000W - 257W/ms 
            226 FR 4    2000W - 257W/ms 
            227 FR 5    1300W - 190W/ms 
            228 FR 4    1300W - 190W/ms 
            229 FR 4    2000W - 200W/ms 
            231 FR 2    2000W - 152W/ms 
            233 FR 3    2000W - 152W/ms 
            234 FR 5    600W - 29W/ms   
            235 FR 4    600W - 29W/ms   
            236 FR 5    2000W - 200W/ms 
            238 FR 5    1500W - 41W/ms  
            239 FR 4    1500W - 41W/ms  
            240 FR 3    1100W - 218W/ms 
            241 FR 2    1100W - 218W/ms 
            242 FR 4    1100W - 218W/ms 
            243 FR 5    1100W - 218W/ms 
            244 FR 5    1100W - 175W/ms 
            245 FR 5    2000W -173W/ms  
            246 FR 4    2000W - 173W/ms 
            247 FR 2    1300W - 190W/ms 
            248 FR 3    1300W - 190W/ms 
            249 FR 5    2000W - 207W/ms 
            250 FR 4    2000W - 207W/ms 
            251 FR 5    2000W - 182W/ms 
            252 FR 5    2000W - 190W/ms 
            253 FR 5    2000W - 186W/ms 
            254 FR 2    DM2000W-200W    
            255 FR 2    2000W - 200W/ms 
            256 FR 3    N2000W -200W/ms 
            257 FR 5    1300W - 177W/ms 
            258 FR 4    N2000W - 207W   
            259 FR 2    2000W - 202W/ms 
            260 FR 3    2000W - 202W/ms 
            261 FR 3    1300W - 218W/ms 
            262 FR 2    1300W - 218W/ms 
            263 FR 2    1300W - 155W/ms 
            264 FR 3    1300W - 155W/ms 
            265 FR 5    2000W - 43W/ms  
            266 FR 4    2000W - 43W/ms  
            267 FR 2    2000W - 257W/ms 
            268 FR 3    2000W - 257W/ms 
            269 FR 5    2000W - 178W/ms 
            270 FR 5    1300W - 155W/ms 
            271 FR 4    1300W - 155W/ms

表B具有以下数据

  machine_Id   recipe_Id
    1   63
    1   85
    1   87
    1   197
    1   200
    1   223
    1   231
    1   241
    1   247
    1   254
    1   255
    1   259
    1   262
    1   263
    1   267
    2   62
    2   85
    2   87
    2   197
    2   200
    2   224
    2   248
    2   256
    2   260
    2   261
    2   264
    2   268
    3   218
    3   226
    3   228
    3   229
    3   246
    3   250
    3   258
    3   266
    3   271
    4   218
    4   225
    4   227
    4   236
    4   243
    4   257
    4   265
    4   269
    4   270

结果,我试图只获得57行。我得到的结果是

id   lotid   name          machine_id
63  FR 3    2000W - 180W/ms 1
85  FR 2    2000W - 173W/ms 1
87  FR 2    1200W - 173W/ms 1
197 FR 2    1100W - 185W/ms 1
200 FR 2    2000W - 185W/ms 1
223 FR 2    N2000W - 200W/ms    1
231 FR 2    2000W - 152W/ms 1
241 FR 2    1100W - 218W/ms 1
247 FR 2    1300W - 190W/ms 1
254 FR 2    DM2000W-200W    1
255 FR 2    2000W - 200W/ms 1
259 FR 2    2000W - 202W/ms 1
262 FR 2    1300W - 218W/ms 1
263 FR 2    1300W - 155W/ms 1
267 FR 2    2000W - 257W/ms 1

正如你所看到的,我只能回到15行左右。我想要回到所有57.如何在加入表B时返回表A中的所有行?

非常感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

删除此

activity

如果不希望表b对你的结果

,只在WHERE中使用表'a'

表示与表'b'相关的标准,将其放在JOIN中。

e.g。

FragmentManger