MySQL在where子句后选择select
此查询在where子句中给出一个未知列公司的错误。我发现where子句先运行,然后select运行。这可能是这里的错误。但我不知道如何纠正这一点,以获得结果集公司。MySQL在where子句后选择select
SELECT trnsdriverid,
name,
(SELECT transcompany.name
FROM transcompany,
transcompdriver
WHERE transcompany.trnscompid = transcompdriver.trnscompid) AS 'company',
address,
dob,
license,
telephone
FROM transcompdriver
WHERE ? LIKE 'All'
OR name LIKE '%"+keyword+"%'
OR company LIKE '%"+keyword+"%'
OR trnsdriverid LIKE '%"+keyword+"%'
您不能在where语句中引用列别名。你应该重写此查询,使用JOIN,然后做你的过滤上的实际TransCompany.name列,例如:
select
d.trnsDriverID
,d.name
,c.name as [Company]
,d.address
,d.dob
,d.license
,d.telephone
from
TransCompDriver d
join
TransCompany c
on
c.trnscompid = d.trnscompid
where
? = 'All'
or
d.name like '%" + keyword + "%'
or
c.name like '%" + keyword + "%'
or
d.trnsDriverID like '%" + keyword + "%'
另外,不要使用LIKE
其中一个简单的等式操作符会做。我改变了上面的查询来使用= 'All'
。
Thnx很多为您的帮助。现在它工作正常。 – amal 2013-03-25 17:19:16
你应该使用连接而不是子查询来做到这一点。我会推荐这:
SELECT
d.trnsDriverID,
d.name,
c.name AS `company`,
d.address,
d.dob,
d.license,
d.telephone
FROM
TransCompDriver AS d
INNER JOIN TransCompany AS c
ON d.trnsCompID = c.trnsCompID
WHERE
? like 'All'
OR d.name LIKE '%"+keyword+"%'
OR `company` LIKE '%"+keyword+"%'
OR d.trnsDriverID LIKE '%"+keyword+"%'
非常感谢您的回复。我上面有类似的答案。这两个答案工作正常。 – amal 2013-03-25 17:27:37
子查询拉列“公司”,如果没有匹配的行数,尝试加入语句,而不是
select trnsDriverID, name, t1.name AS company, address, dob, license, telephone
from TransCompDriver JOIN (select trnsDriverID, name,
(select TransCompany.name from TransCompany LEFT JOIN TransCompDriver
ON TransCompany.trnsCompID=TransCompDriver.trnsCompID) AS t1
where ? like 'All' or name like '%"+keyword+"%' or company like '%"+keyword+"%'
or trnsDriverID like '%"+keyword+"%'
那是因为你是走样的结果嵌套选择为“公司” - 该列实际上不存在。您不能在where语句中引用列别名。您应该重写此查询以使用JOIN,然后在实际的“TransCompany.name”列上进行过滤。 – 2013-03-25 17:02:58
公司专栏没有与其他专栏 – 2013-03-25 17:05:02
@Cory Thnx相同数量的行作为回复。我会尝试加入。 – amal 2013-03-25 17:09:16