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
解决方案: |
|
|
|
|
|