2012-02-11 2 views
-2

이 쿼리는 작동하지 않습니다. 나는 무언가가 무언가 인 LEFT JOIN에서 모든 결과를 원한다. 200은 테이블 간의 연결 변수MySQL 왼쪽 선택에서 모두 선택

SELECT * FROM `swarovski_zones` WHERE `siteid`='200' 
LEFT JOIN `trafficviews` ON `swarovski`.`id`=`trafficviews`.`adid` 

swarovski_zones 표는 200

trafficviews 테이블 AdID에 200

입니다 siteid : 이것은 내 정확한 코드입니다. ID가 200

+0

"작동하지 않음">. < –

+0

시누 틱 오류 외에도 의미 론적 오류가 있습니다. 당신은 단지'id가 200 인 왼쪽 테이블에서 모든 것 '을 얻고 있습니다. 'ID가 200 인 두 테이블의 모든 것 '을 얻으려면 외부 조인이 필요합니다. –

+0

id **가'swarovski_zones'에 존재하지 않을 수도 있고'trafficviews'에만 존재할 수도 있습니다. 내 대답을 받아 들일 수 없습니다. 그 시나리오에 맞는 @ MostyMostacho를 수락하십시오. – Ben

답변

6

이 쿼리가 작동하지 않는 조인 두 테이블에서 모든 것을 할 수 있습니다. 그것은해야한다 :

select 
from 
join 
on 
where 
group by 
having 
order by 
limit 

당신에게주기 : 또한 siteid는 의미

select * 
    from `swarovski_zones` 
    left join `trafficviews` 
    on `swarovski`.`id` = `trafficviews`.`adid` 
where `siteid` = '200' 

문자열이 아닌 정수로?

아마 위의 목록을 제공하는 후회거야 ...

Limit! 깜빡했습니다 Limit; 전체 구문 목록은 here

+0

감사합니다이 작품은, 그러나 내 테이블에 두 개의 필드를 "ID"그들은 두 테이블에 대한 동일한 자동 생성 기본 키 ID를 .. 참조 그래서 행에 ..이 영향을 미칠 것입니다 - 난 두 개의 ID 열이? – TheBlackBenzKid

+0

Thw'JOIN'과'ON'은'FROM' 절의 일부입니다.'WHERE' 절 (또는 HAVING 또는 ...)에 나타날 수있는 AND 및 OR과 매우 비슷합니다. –

+1

@ypercube라고 말했듯이, 나는 목록을 제공하는 것을 후회할 것이다 :-). 그것이 OP가 문제가되었을 때'join'을 놓치지 않는 것이 무의미한 것처럼 보였습니다. – Ben

1

사용자이고 나는 완전 외부 구문이 올바르지 않아

SELECT * FROM `swarovski_zones` WHERE `siteid`='200' 
FULL OUTER JOIN `trafficviews` ON `swarovski`.`id`=`trafficviews`.`adid` 
+1

MySQL에는 FULL OUTER JOIN이 없습니다. 그것은 쿼리에 문제가되지 않습니다. –

+0

http://www.xaprb.com/blog/2006/05/26/how-to-write-full-outer-join-in-mysql/ –

+0

그 기사의 어떤 부분도'full outer join'으로 쓰여 있지 않습니다 select 문. – Ben

1

입니다. 여기서 문제는 올바른 테이블 (trafficviews)의 요소가 왼쪽 테이블 (swarovski_zones)의 대응 행을 갖지 않을 수 있다는 것입니다. 따라서 왼쪽 조인은 왼쪽에서 모든 요소를 ​​가져오고 오른쪽에서 몇 가지 요소를 제외 할 수 있습니다.

이 문제를 해결하려면 외부 조인이 필요합니다. 귀하의 문제는 MySQL이 외부 지원하지 않는 것은 조인 : 이것은 다음과 같은 일반적인 방법으로 해결 :

SELECT * FROM swarovski_zones s 
LEFT JOIN trafficviews ON s.id = t.adid 
UNION ALL 
SELECT * FROM swarovski_zones s 
RIGHT JOIN trafficviews ON s.id = t.adid WHERE s.id IS NULL 
WHERE s.siteid = 200 or t.adid = 200 

그것을 시도 줄 :

SELECT * FROM a LEFT JOIN b ON a.id = b.id 
UNION ALL 
SELECT * FROM a RIGHT JOIN b ON a.id = b.id WHERE a.id IS NULL; 

귀하의 질문에 같은이해야 뭔가를 적용.

+0

감사합니다. – TheBlackBenzKid