如何根据SQL中的条件选择多列?

  • 本文关键字:选择 条件 何根 SQL mysql sql
  • 更新时间 :
  • 英文 :


我有一个表,列如下:

| id | position | A | B | C | D | E |

我选择的是id。如果位置是'1',它应该返回列A, B, C。如果不是,它应该返回列D, E

例如,如果表是:

| id | position | A | B | C | D | E |
|  0 |     1    | a | b | c | d | e |
|  1 |     2    | a | b | c | d | e |

当查询选择id=0时,结果应该是:

|  0 |    1    | a | b | c |

当查询选择id=2时,结果应该是:

|  1 |    2    | d | e |

我应该如何写SQL查询?

您不能根据选定的行编写查询来选择列。但是如果你想要特定的列,你可以这样做:

SELECT id, position, A, B, C
FROM tablename
WHERE id = 1

试试这个…

select id, position,
if (id=0, A, D),
if (id=0, B, E),
if (id=0, C, "")
from Table1

这有点不灵活,但这是一个开始。你可以在这里玩:http://sqlfiddle.com/# !9/d47c33/10/0

结果集每行不能有不同的列数,所以它必须是| 1 | 2 | d | e | NULL |

要得到你想要的,你可以创建两个查询并将它们联合在一起。否则,您可以为每列创建一个CASE语句,但如果没有必要,请不要这样做。

如果您有选择的话,我建议您只进行两次查询,并分别处理结果。

但是UNION:

select id, position, a, b, c
from cool_table
where id in (1, 2, 3, 4, 5)
and position = 1
UNION
select id, position, d, e, null
from cool_table
where id in (1, 2, 3, 4, 5)
and position <> 1

说真的,这看起来像是你在"违背常理"。也许可以在其他地方做一些改进,使这一点没有必要。

数据库查询不是放置显示逻辑的地方。正如其他人所说,查询有固定数量的字段。

您可以根据position字段使用ifcase来空字段,但选择所有字段,将它们发送到前端,并让它显示如何显示结果会更简单。

最新更新