回答

收藏

WHERE条件下的SQL IF ELSE / CASE子句

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

我有一个很大的MySQL语句,通过php foreach每个循环都通过union
' L9 b1 J8 K' v& N! xall连接到以前的循环。我将把句子简化为问题的核心,如果有必要,我当然可以在未来添加更多的细节。  X- D7 k% [# \- n9 @+ g( @% _
我有这张桌子5 d2 @( K! Y8 v  `5 T% O
    -------- ----------- ----------- |   ID   |   LANG    |   TITLE   | -------- ----------- ----------- |   1    |    EN     |   T-A     | -------- ----------- ----------- |   1    |    FR     |   T-A     | -------- ----------- ----------- |  2     |    FR     |   T-B     | -------- ----------- ----------- |  3    |    DE     |   T-C     | -------- ----------- ----------- |  3    |    EN     |   T-C     | -------- ----------- ----------- 我想在SQL SELECT中写一个 WHERE    条件,该条件应显示 每个ID最多一个结果    。但是,仅当LANG为FR或EN时,
& _/ ?% j0 `& Q# W6 o它应该显示结果。最重要的是,优先使用FR,    并且仅当ID没有可用的FR应显示时间EN作为替代品。因此,结果如下所示。! H: y' E8 e5 z4 \, P6 [" a
    -------- ----------- ----------- |   ID   |   LANG    |   TITLE   | -------- ----------- ----------- |   1    |    FR     |   T-A     | -------- ----------- ----------- |  2     |    FR     |   T-B     | -------- ----------- ----------- |  3    |    EN     |   T-C     | -------- ----------- ----------- 我曾尝试使用IF-ELSE / CASE我自己建一些东西,但我对SQL经验不是很丰富,所以会很感激。" D5 @$ L) O+ `0 L3 z1 f, O1 n) g8 G
我试过简化SQL就像5 D" n' ~1 _  I! N5 o6 z
SELECT * FROM `table` WHERE `table`.`ID` = 1IF `table`.`LANG` = 'FR' BEGIN  AND `table`.`LANG` = 'FR' ENDELSEBEGIN  AND `table`.`LANG` = 'EN' ENDunion all SELECT * FROM `table` WHERE `table`.`ID` = 2IF `table`.`LANG` = 'FR' BEGIN  AND `table`.`LANG` = 'FR' ENDELSEBEGIN  AND `table`.`LANG` = 'EN' ENDunion all SELECT * FROM `table` WHERE `table`.`ID` = 3IF `table`.`LANG` = 'FR' BEGIN  AND `table`.`LANG` = 'FR' ENDELSEBEGIN  AND `table`.`LANG` = 'EN' END网站说明我可能不会ORDER BY与LIMIT 1结合使用任何结构,因为我必须通过每个循环php将SQL循环多次。8 C$ K% c1 R* @3 b4 f7 _
编辑: 对我    有用的 解决方案$ Q0 e3 H$ `! f! Q
SELECT * FROM `table1`WHERE ID = 1AND lang = 'FR'OR (lang = 'EN' AND ID NOT IN (SELECT ID FROM table1 WHERE lang = 'FR)               6 ^9 L6 w; [7 v& M
    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则