选择在-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';