回答

收藏

SQL LEFT JOIN仅第一行

技术问答 技术问答 274 人阅读 | 0 人回复 | 2023-09-12

假设我们有这样的数据集:  f$ d2 X0 J! Z: R! E; T' ^
表格:DataTable18 `- X# ?1 e5 G- A0 s# y( L
ID      ExperienceId   LanguageId    ...-------------------------------------------  1121212                                       233             34   34                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ...表格:DataTable2
1 Y9 M* u3 O! Z" ~ID      SomeId OtherId LanguageId    ...-------------------------------------------         459   1212        459              233        459      34           24555                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ...我想加入这些表,只得到SomeId列,而忽略LanguageId列。为它更清楚:
0 B8 L- p! w+ n1 s4 L, ~$ Q+ U9 z; NSELECT    t2.SomeId AS RequiredId    -- ...other data mainly from t2FROM DataTable1 AS t1LEFT JOIN DataTable2 AS t2     ON t2.OtherId = t1.ExperienceId     AND t2.LanguageId =         (SELECT TOP 1 t1.LanguageId         ORDER BY t1.LanguageId)这个查询应该返回(如果没有错,很明显):$ E3 w+ T7 @' Z+ |$ h0 l8 Z: y
SomeId    ...----------------459       ...245       ...295        ......现在,它已经三次相同的数据(只有LanguageId不同)。
+ Y( }% n' d- n5 h0 HWHERE t1.LanguageId =如果我确定它总是存在,我会试着用它来过滤,但我不确定。LanguageId1到3,也只能是ID
% w( b+ o) J) q0 a. ?  D2.以此类推。至少会有一条线。LanguageId。# z$ ?0 N  [  Q: l" f1 X6 @
现在我的问题是: 如何连接具有唯一值和完全忽略表中列的表    ?  H( L; ]5 L; z: G# ]
                                                                0 D. q0 v3 c$ o- F, ^+ _% r
    解决方案:                                                                , p3 h4 {% ?" N4 B7 @5 c4 H* ~( D
                                                                在另一个查询中包装它有诀窍吗?
+ G, `# ~5 R# R& V$ }  O( aSELECT RequiredId, from (SELECT t2.SomeId AS RequiredId-- ...other data mainly from t2FROM DataTable1 AS t1   LEFT JOIN DataTable2 AS t2    ON t2.OtherId = t1.ExperienceId    AND t2.LanguageId =       (SELECT TOP 1 t1.LanguageId      ORDER BY t1.LanguageId)   ) group by RequiredId,甚至根本不提取列?
2 b; |- i. y  `$ l& aSELECT distinct t2.SomeId AS RequiredId-- ...other data mainly from t2 BUT not the Language idFROM DataTable1 AS t1   LEFT JOIN DataTable2 AS t2    ON t2.OtherId = t1.ExperienceId    AND t2.LanguageId =       (SELECT TOP 1 t1.LanguageId      ORDER BY t1.LanguageId)
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则