Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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_Select_Where - Fatal编程技术网

选择在-mySQL中的位置

选择在-mySQL中的位置,mysql,select,where,Mysql,Select,Where,假设我有下表: ID, Name 1, John 2, Jim 3, Steve 4, Tom 我运行以下查询 SELECT Id FROM Table WHERE NAME IN ('John', 'Jim', 'Bill'); 我想得到这样的东西: ID 1 2 NULL or 0 可能吗?这个怎么样 SELECT Id FROM Table WHERE NAME IN ('John', 'Jim', 'Bill') UNION SELECT null; 首先

假设我有下表:

 ID, Name 
 1, John 
 2, Jim 
 3, Steve 
 4, Tom
我运行以下查询

SELECT Id FROM Table WHERE NAME IN ('John', 'Jim', 'Bill');
我想得到这样的东西:

ID
1
2
NULL or 0
可能吗?

这个怎么样

SELECT Id FROM Table WHERE NAME IN ('John', 'Jim', 'Bill')
   UNION
SELECT null;

首先创建要查找的名称的子查询,然后将子查询左键联接到表中:

SELECT myTable.ID
FROM (
  SELECT 'John' AS Name
  UNION SELECT 'Jim'
  UNION SELECT 'Bill'
) NameList
LEFT JOIN myTable ON NameList.Name = myTable.Name
对于未找到的每个名称,这将返回
null
。要返回零,只需使用
selectcoalesce(myTable.ID,0)
而不是
selectmytable.ID
启动查询


有一个SQL问题。

这个问题有点让人困惑。“IN”是SQL中的有效运算符,表示与任何值匹配(请参阅):

同:

SELECT Id FROM Table WHERE NAME = 'John' OR NAME = 'Jim' OR NAME = 'Bill';
在您的回答中,您似乎希望每个值的回复按顺序排列。这是通过将结果与UNION ALL合并来实现的(只有UNION可以消除重复项并可以更改顺序):

如果存在匹配项,则上述将返回1个Id(最大值),如果没有匹配项,则返回NULL(例如,对于账单)。请注意,通常情况下,您可以有多行匹配列表中的某些名称,我使用“max”选择了一行,您最好在查询外部保留值的循环,或者在与数据库中的其他表的联接中使用(ID,Name)表,而不是创建ID列表然后使用它

SELECT Id FROM Table WHERE NAME = 'John' OR NAME = 'Jim' OR NAME = 'Bill';
SELECT max(Id) FROM Table WHERE NAME = 'John' UNION ALL
SELECT max(Id) FROM Table WHERE NAME = 'Jim' UNION ALL
SELECT max(Id) FROM Table WHERE NAME = 'Bill';