2013-03-25 2 views
0

이 쿼리는 where 절에있는 알 수없는 열 회사를 제공합니다. 나는 where 절이 먼저 실행되고 select가 다음에 실행된다는 것을 발견했다. 여기에 오류가있을 수 있습니다. 하지만 결과 세트에서 회사를 얻으려면이 문제를 해결하는 방법을 모릅니다.MySQL excutes where 절 이후

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' 열에서 필터링을 수행해야합니다. –

+0

회사 열에 다른 열과 같은 행 금액이 없습니다 –

+0

@Cory Thnx 답장을 보내주십시오. 나는 조인을 시도 할 것이다. – amal

답변

1

where 문에서 열 별칭을 참조 할 수 없습니다. 단순한 항등 연산자가 할 것 인 LIKE를 사용하지 않는, 또한

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

: 당신은 예를 들어, 실제 TransCompany.name 열을 필터링 할 다음이 가입 사용이 쿼리를 다시 작성해야합니다. 위에서 쿼리를 변경하여 = 'All'을 사용했습니다.

+0

Thnx 많은 도움을 받으십시오. 이제 제대로 작동합니다. – amal

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

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