MySQL执行where子句后选择
此查询在where子句中提供未知列company时出错。我发现where子句首先运行,select然后运行。这可能是这里的错误。但我不知道如何纠正这一点,以便让公司进入结果集MySQL执行where子句后选择,mysql,select,where,Mysql,Select,Where,此查询在where子句中提供未知列company时出错。我发现where子句首先运行,select然后运行。这可能是这里的错误。但我不知道如何纠正这一点,以便让公司进入结果集 SELECT trnsdriverid, name, (SELECT transcompany.name FROM transcompany, transcompdriver WHERE transcompany.trnscom
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语句中引用列别名。您应该重写此查询以使用联接,然后对实际的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 + "%'
另外,不要像使用简单的相等运算符那样使用
。我将上面的查询更改为使用='All'
您真的应该使用连接而不是子选择来执行此操作。我建议:
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+"%'
提取列“company”的子查询没有匹配的行数,请改为尝试join语句
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+"%'
这是因为您将嵌套select的结果别名为“company”——该列实际上并不存在。不能在where语句中引用列别名。您应该重写此查询以使用联接,然后对实际的TransCompany.name
列进行筛选。该公司列的行数与另一列的行数不同columns@Cory谢谢你的回复。我将尝试使用join。@user2033382:我回答了一个应该有效的查询。@Cory。是的,很好用。又来了一批。不幸的是,由于缺乏声誉,还不能投票。谢谢你的回复。我在上面得到了类似的答案。两个答案都很好。