0

我陷入了这个问题。如果我有这样的表:

----------------------------------------
ID |  field1 | field2 | field3| field4 |
----------------------------------------
1  |   1     |   0    |    1  |  0     |
----------------------------------------
2  |   0     |   1    |    0  |  1     |
----------------------------------------

我想编写一个查询,选择一条只有列等于= 1 的记录,例如 1。其中 ID = 1

 ---------------------
ID |  field1 | field3 
----------------------
1  |   1     |   1   

2. 其中 ID = 2

 ---------------------
ID |  field2 | field4 
----------------------
2  |   1     |   1   

你们能建议或给我一个建议,如何做到这一点?

非常感谢您花时间阅读我的问题。

4

2 回答 2

3

不,SQL 不这样做,在运行时有条件地返回列。

要返回的列集在分析和准备 SQL 语句时确定。它不能在运行时动态更改。

为了得到如图所示的结果,我们需要两个不同的查询

SELECT t.id, t.field1, t.field3
  FROM mytable t 
 WHERE ...

SELECT t.id, t.field2, t.field4
  FROM mytable t 
 WHERE ...

我们可以为 SELECT 列表中的表达式提供别名,但同样,这些必须在 SQL 文本中指定;这些不能在执行时更改。

 SELECT t.id, 1 AS field2, 1 AS field4 
   FROM mytable t 
  WHERE ...

但是我们仍然需要不同的 SQL 文本来返回 field1 和 field3。


似乎可以填充字段 1..4 的 2^4 (1+4+6+4+1) 种可能组合。共有 16 个可能的 SELECT 列表。

我们可以运行一个预查询,找出应该返回哪个字段 N,并使用该查询的结果来制定第二个查询的文本。

但是,这样做所需的繁琐似乎没有必要。

于 2018-05-03T04:58:51.240 回答
0

您必须使用 WHERE 条件来选择值。将表名视为 Table1。

SELECT * FROM Table1 WHERE ID = 1

如果要从多个 ID 中进行选择,可以使用 IN 子句。

SELECT * FROM Table1 WHERE ID IN (1,2)

如果您只想要 Field1、Field3,那么只需在 SELECT 查询中提及它们。您不需要 *,它对应于所有字段。

SELECT Field1, Field3 FROM Table1 WHERE ID = 1
于 2018-05-03T04:24:43.097 回答