WHERE条件下的SQL IF ELSE / CASE子句
技术问答
230 人阅读
|
0 人回复
|
2023-09-12
|
我有一个很大的MySQL语句,通过php foreach每个循环都通过union
4 }- P8 W9 S, e8 {. Jall连接到以前的循环。我将把句子简化为问题的核心,如果有必要,我当然可以在未来添加更多的细节。$ F5 J* x) F1 i1 O! U( }
我有这张桌子
2 K5 D. E) d+ D -------- ----------- ----------- | 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时,
2 x2 n# N- W' D2 m: v它应该显示结果。最重要的是,优先使用FR, 并且仅当ID没有可用的FR应显示时间EN作为替代品。因此,结果如下所示。
8 l0 f: D/ Q. ?( g8 _; C( B -------- ----------- ----------- | ID | LANG | TITLE | -------- ----------- ----------- | 1 | FR | T-A | -------- ----------- ----------- | 2 | FR | T-B | -------- ----------- ----------- | 3 | EN | T-C | -------- ----------- ----------- 我曾尝试使用IF-ELSE / CASE我自己建一些东西,但我对SQL经验不是很丰富,所以会很感激。
7 F" H$ w! f4 D' n( p我试过简化SQL就像+ k0 m* r" ]( I; _" N2 a3 c
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循环多次。3 }4 `; f; ^" B2 ~- Z+ n/ ?
编辑: 对我 有用的 解决方案. ^7 g# v2 b, `( P
SELECT * FROM `table1`WHERE ID = 1AND lang = 'FR'OR (lang = 'EN' AND ID NOT IN (SELECT ID FROM table1 WHERE lang = 'FR) ( J. m4 w# P5 k( v
解决方案: |
|
|
|
|
|