我想基于条件where子句从表中进行简单选择。

我喜欢这样:

CREATE TABLE TEST (SOMETHING TEXT, NAME TEXT, LANG INT(2));

INSERT INTO TEST (SOMETHING, NAME, LANG) VALUES ('123','US',1);
INSERT INTO TEST (SOMETHING, NAME, LANG) VALUES ('234','US',2);
INSERT INTO TEST (SOMETHING, NAME, LANG) VALUES ('345','EU',2);


我想在LANG = 1中选择NAME(如果可用),否则在LANG = 2中选择。

我正在这样做:

SELECT * FROM TEST WHERE CASE
WHEN LANG=1 THEN LANG=1
ELSE LANG=2
END


我得到这个:

123 US 1
234 US 2
345 EU 2


但是要这样:

123 US 1
345 EU 2


我应该使用GROUP HAVING还是如何使用?

最感谢您的帮助。

最佳答案

您可以使用EXISTS做到这一点:

select t.*
from test t
where not exists (
  select 1 from test
  where something <> t.something and name = t.name and lang = 1
)


请参见demo
结果:

| SOMETHING | NAME | LANG |
| --------- | ---- | ---- |
| 123       | US   | 1    |
| 345       | EU   | 2    |

关于mysql - MySQL的选择情况,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55787765/

10-14 09:47