2014-04-28 5 views
-1

많은 옵션이있는 큰 필터가 있고 SQL 코드가없는 SQL 자동 태그에 대한 쿼리를 생성하려고합니다.SQL 중복 행

GET :

searchvalue=abc 
&title=abc 
&description=abc 
&category=1 
&subcategory=2 
&zip=7 
&city=ke 
&country=DE 

SQL :이 옵션으로

SELECT activity.* FROM activity,subcategory,city,country 
WHERE activity.title LIKE '%abc%' OR activity.description LIKE '%abc%' 
AND subcategory.SubID = 2 
AND city.zip LIKE '%7%' 
AND city.City LIKE '%ke%' 
AND country.CShort= 'DE' 

, 내 데이터베이스에 1 개 행을 가지고있다. 대답은 여러 번 여러 번이 행입니다.

테이블이 WHERE 절에 사용되지 않을 때 sql이 행을 복제한다는 것을 알고 있습니다.하지만 왜 지금 그 작업을 수행하고 어떻게 해결할 수 있습니까?

편집 : 나는 ER을 가지고 있지만 데이터베이스가 독일어 (학교 프로젝트)에, 어쩌면 당신이 이해하는 데 도움이 : enter image description here

감사합니다!

+4

당신은 어떤'JOIN' 조건없이 세 가지 다른 테이블에'JOIN'을하고 있습니다. 이것은 당신에게 거대한 수의 행을 설명 할 3 개의 테이블의 데카르트 곱을 제공합니다. [이 리소스] (http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/)를 확인하십시오. – Kryten

+0

나는 반드시 JOIN을 사용해야합니까? – user1878413

+0

@ user1878413,'JOIN'을 사용하거나 WHERE 절에서 테이블을 바인드하십시오; 하지만 너는 *해야만한다. –

답변

1

여러 테이블을 선택하여 교차 제품을 수행하고 있습니다. SQL은 한 테이블의 모든 행을 다른 테이블의 모든 행과 결합하여 반환합니다.

테이블이있는 데이터베이스의 예를 들어

|------|----------| 
| idA | textA | 
|------|----------| 
| 1 | fooA  | 
| 2 | barA  | 
|------|----------| 

및 표 B

|------|----------| 
| idB | textB | 
|------|----------| 
| 1 | fooB  | 
| 2 | barB  | 
|------|----------| 

당신이

SELECT * FROM a, b 

을 할 때 당신은 얻을 것

|------|----------|------|----------| 
| idA | textA | idB | textB | 
|------|----------|------|----------| 
| 1 | fooA  | 1 | fooA  | 
| 1 | fooA  | 2 | barA  | 
| 2 | barA  | 1 | fooB  | 
| 2 | barA  | 2 | barB  | 
|------|----------|------|----------| 
,

이러한 행을 논리적으로 결합하려면 JOIN을 수행하십시오. 즉, 어떤 행이 함께 속하는지 쿼리에서 알 수 있습니다. JOIN 절 또는 JOIN 절없이 WHERE 절에서 직접 수행 할 수 있습니다. 위로 예제는

SELECT * FROM a, b 
WHERE a.idA = b.idB 

-- or 

SELECT * FROM a 
JOIN b ON a.idA = b.idB 

는 만 2 행을 얻을 것이라고 할 것입니다.


|------|----------|------|----------| 
| idA | textA | idB | textB | 
|------|----------|------|----------| 
| 1 | fooA  | 1 | fooA  | 
| 2 | barA  | 2 | barB  | 
|------|----------|------|----------| 

은 귀하의 질문에 대답하려면 당신이 절은 데이터베이스 스키마에 따라 테이블 activity, subcategory, citycountry를 연결하는 WHERE/가입 지원해야합니다.

나는 당신의 테이블 구조를 모르는 그러나이 같은 예 절에 대해 :

WHERE 
    ... 
AND city.country_id = country.id 
AND activity.subcategory_id = subcategory.id 
AND ...