2013-02-12 4 views
2

제품이라는 테이블이 있습니다. 기본적으로 이처럼 여러 분야에서 동일한 단어를 사용하여 검색해야합니다.기본 SQL 하위 쿼리

SELECT 
    `id`, 
    `product-id`, 
    `country`, 
    `name`, 
    `description`, 
    `branch`, 
    `stock`, 
    `price` 
FROM 
    `products` 
WHERE 
    `name` LIKE "%car%" 
OR `description` LIKE "%car%" 
OR `branch` LIKE "%car%" 
OR `product-id` LIKE "%car%" 

이제는 다른 쿼리를 원합니다. 특정 국가의 모든 자동차와 추가 필드를 보여 드리고자합니다. 따라서이 쿼리를 실행하면

SELECT 
    DISTINCT(b.`id`) id, 
    a.id, 
    a.`product-id`, 
    a.`country`, 
    a.`name`, 
    a.`description`, 
    a.`branch`, 
    a.`stock`, 
    a.`price` 
FROM 
    `products` as a, 
(
    SELECT 
     * 
    FROM 
     `products` 
    WHERE 
     `country` = "Canada" 
    LIMIT 0, 
    10 
)AS b 
WHERE 
    a.`id` = b.`id` 
OR b.`product-id` LIKE "%car%" 
OR b.`name` LIKE "%car%" 
OR b.`branch` LIKE "%car%" 
OR b.`description` LIKE "%car%" 

LIMIT 0, 10 

결과가 두 개 이상인 나라에서 어떤 결과가 발생합니까? 당신은 추가로 필요하지 않습니다 사전

+0

[fiddle] (http://www.sqlfiddle.com)을 설정하십시오. – hd1

답변

2

당신이 당신의 조건 그룹에 필요에

감사합니다,

SELECT ... 
FROM ... 
WHERE (a.`id` = b.`id`) AND 
     ( 
      b.`product-id` LIKE "%car%" OR 
      b.`name` LIKE "%car%" OR 
      b.`branch` LIKE "%car%" OR 
      b.`description` LIKE "%car%" 
     ) 
2

가입. 그냥 적절한 괄호로 where 절에 조건을 추가 :

SELECT 
    `id`, 
    `product-id`, 
    `country`, 
    `name`, 
    `description`, 
    `branch`, 
    `stock`, 
    `price` 
FROM 
    `products` 
WHERE 
    country = 'Canada' and 
    (`name` LIKE "%car%" 
    OR `description` LIKE "%car%" 
    OR `branch` LIKE "%car%" 
    OR `product-id` LIKE "%car%" 
    ) 
limit 30 

내가 의도는 질문에 무엇인지 확실하지 않다하더라도 한도는 여기에 적합하다 생각합니다.

+0

두 가지 해결책이 모두 옳았습니다. JW와 고든 고마워. 그러나 JM이 먼저 대답하여 제 표가 그를지지했습니다. –

+0

@PaulReid. . . 두 가지 솔루션에는 근본적인 차이점이 있습니다. 질문과 JW.의 해결책에있는 질의는 불필요한 조인을 가지고있다. 이 버전은 그것을 제거합니다. –