2013-03-25 91 views
0

此查詢在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+"%' 
+0

那是因爲你是走樣的結果嵌套選擇爲「公司」 - 該列實際上不存在。您不能在where語句中引用列別名。您應該重寫此查詢以使用JOIN,然後在實際的「TransCompany.name」列上進行過濾。 – 2013-03-25 17:02:58

+0

公司專欄沒有與其他專欄 – 2013-03-25 17:05:02

+0

@Cory Thnx相同數量的行作爲回覆。我會嘗試加入。 – amal 2013-03-25 17:09:16

回答

1

您不能在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'

+0

Thnx很多爲您的幫助。現在它工作正常。 – amal 2013-03-25 17:19:16

0

你應該使用連接而不是子查詢來做到這一點。我會推薦這:

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+"%' 
+0

非常感謝您的回覆。我上面有類似的答案。這兩個答案工作正常。 – amal 2013-03-25 17:27:37

0

子查詢拉列「公司」,如果沒有匹配的行數,嘗試加入語句,而不是

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+"%'