我有一个查询,它从最终用户那里获取输入,并将其分别与2列进行比较,并将两列连接起来。
SELECT f_name, l_name, (f_name + ' ' + l_name) AS full_name
FROM users_table
WHERE f_name = user-input
OR l_name = user-input
OR 'full_name' = user-input
请原谅大量语法失败,但我保证在程序中它是正确的。
它是用PHP编写的,查询SQL SERVER 2005数据库,并且不区分大小写。
键入一个名称(第一个或最后一个)将返回正确的结果,但首先输入,然后输入空格,然后输入最后一个,返回一个空集。
有什么想法吗?
答案 0 :(得分:11)
这是因为'full_name'是文字而不是列名,它在WHERE子句级别不存在
你需要添加
OR f_name + ' ' + l_name = user-input
而不是
或'full_name'=用户输入
答案 1 :(得分:5)
根据“教人钓鱼”理论......
您不能在where或group by子句中使用列别名。您可以在order by子句中使用它。要按照您希望的方式使用列别名,您必须执行类似......
的操作SELECT [Full Name] FROM
(SELECT f_name, l_name, f_name + ' ' + l_name AS [Full Name]
FROM users_table)
WHERE [Full_Name] = @paramVal
答案 2 :(得分:2)
'full_name'是一个文字字符串而不是列...
(f_name +''+ l_name)=用户输入
答案 3 :(得分:2)
尝试:
SELECT f_name,
l_name,
(f_name + ' ' + l_name) AS full_name
FROM users_table
WHERE f_name = user-input
OR l_name = user-input
OR f_name + ' ' + l_name = user-input
答案 4 :(得分:1)
对于初学者,请删除最后一个条件中full_name周围的单引号。现在将用户输入与字符串文字'full_name'进行比较。
连接部分应该是好的!
答案 5 :(得分:1)
问题出在这一行:
OR 'full_name' = user-input
如果实际上是你写下来的,那么你将文字字符串“full_name”与提供的输入进行比较。在单词周围加上单引号将其视为文字。请尝试以下方法:
SELECT f_name, l_name, (f_name + ' ' + l_name) AS full_name
FROM users_table
WHERE f_name = user-input
OR l_name = user-input
OR full_name = user-input
答案 6 :(得分:1)
这将有效:
SELECT *
FROM users_table
WHERE CONCAT(first_name,' ',last_name) = user-input;
答案 7 :(得分:0)
确保用户输入“full_name”(不带引号)作为用户输入,数据库将返回一些行。