选择具有非空值列的记录

时间:2018-05-03 04:21:43

标签: mysql sql

我坚持这个问题。如果我有这样的表:

----------------------------------------
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   

你们可以建议或给我一个建议,如何制作它?

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

2 个答案:

答案 0 :(得分: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。

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

我们可以运行一个prequery,找出应该返回哪个fieldN,并使用该查询的结果来表示第二个查询的文本。

但要做到这一点所需的严谨性似乎并不合理。

答案 1 :(得分:0)

您必须使用WHERE条件来SELECT值。将表名称视为表1。

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