Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 选择具有非空值列的记录_Mysql_Sql - Fatal编程技术网

Mysql 选择具有非空值列的记录

Mysql 选择具有非空值列的记录,mysql,sql,Mysql,Sql,我陷入了这个问题。如果我有这样一张桌子: ---------------------------------------- ID | field1 | field2 | field3| field4 | ---------------------------------------- 1 | 1 | 0 | 1 | 0 | ---------------------------------------- 2 | 0 | 1 |

我陷入了这个问题。如果我有这样一张桌子:

----------------------------------------
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   
二,。其中ID=2

 ---------------------
ID |  field2 | field4 
----------------------
2  |   1     |   1   
你们能给我一个建议吗,怎么做


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

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

SELECT * FROM Table1 WHERE ID = 1
若要从多个ID中选择,可以在子句中使用

SELECT * FROM Table1 WHERE ID IN (1,2)
如果只需要字段1、字段3,则只需在SELECT查询中提及它们。您不需要*,它对应于所有字段

SELECT Field1, Field3 FROM Table1 WHERE ID = 1

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

SELECT * FROM Table1 WHERE ID = 1
若要从多个ID中选择,可以在子句中使用

SELECT * FROM Table1 WHERE ID IN (1,2)
如果只需要字段1、字段3,则只需在SELECT查询中提及它们。您不需要*,它对应于所有字段

SELECT Field1, Field3 FROM Table1 WHERE ID = 1

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

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

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

SELECT t.id, t.field1, t.field3
  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个可能的选择列表

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


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

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

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

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

SELECT t.id, t.field1, t.field3
  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个可能的选择列表

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


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

非常感谢,但是如果使用“从表1中选择*,其中ID=1”返回ID=1的所有列,我想要的预期结果只是字段1和字段3谢谢,很抱歉没有明确的要求,预期结果是显示哪个列的值为1,您必须相应地对相应列应用WHERE条件。如果是字段1,将WHERE条件应用为
WHERE Field1=1
谢谢,但我认为这是不正确的,如果我将WHERE Field1=1添加到查询中,它将显示ID=1、字段1=1、字段2=0、字段3=1、字段4=0,但我想要的结果只是字段1和字段3,因为它们的值=1。它将显示带有列的ID,列的值为1,从表1中选择字段1、字段3,其中ID=1和(字段1=1和字段3=1)。请检查此项非常感谢,但如果使用“SELECT*FROM Table1 WHERE ID=1”返回ID=1的所有列,我想要的预期结果只是字段1和字段3谢谢,很抱歉没有明确的要求,预期结果是显示哪个列的值为1,您必须相应地对相应列应用WHERE条件。如果是字段1,将WHERE条件应用为
WHERE Field1=1
谢谢,但我认为这是不正确的,如果我将WHERE Field1=1添加到查询中,它将显示ID=1、字段1=1、字段2=0、字段3=1、字段4=0,但我想要的结果只是字段1和字段3,因为它们的值=1。它将显示带有列的ID,列的值为1,从表1中选择字段1、字段3,其中ID=1和(字段1=1和字段3=1)。请检查这类问题是设计不良的症状这类问题是设计不良的症状谢谢,这样muchIt就可以创建一个查询,返回两列,一列带有
id
值,另一列作为字符串,包含逗号(或其他分隔符)分隔列表。。。e、 g.
“字段1,字段3”
。我们可以将其作为字符串值返回,一个列,使用我们指定的任何别名,例如
foo
作为列标题。感谢您,这样就可以创建一个查询,返回两列,一列带有
id
值,另一列作为字符串,其中包含逗号(或其他分隔符)分离列表。。。e、 g.
“字段1,字段3”
。我们可以将其作为字符串值、单个列返回,并使用我们指定为列标题的任何别名,例如
foo