2014-12-09 2 views
0

검색 결과에 아무런 결과도 없었습니다. 질문을 덜 모호하게 만들 수 없기 때문입니다. 나는했습니다과 같은 DB : 내가 가입하고 NULL이 그 때문에 잘못의 이해한다세 테이블이있는 MYSQL 피벗은 NULL을 반환합니다.

ID| NUMBER |RESTRICTED| TITLE| 

1 | one  |  1 | (null)| 

2 | two  | 0  | (null)| 

select contracts.*, agents.title from pivot 
left join users on pivot.userid = users.id 
left join agents on pivot.agentid = agents.id 
left join contracts on pivot.contractid = contracts.id 
where users.id = 2 

가 반환

CREATE TABLE users 
    (`id` int, `name` varchar(4)) 
; 

INSERT INTO users 
    (`id`, `name`) 
VALUES 
    (1, 'john'), 
    (2, 'jane'), 
    (3, 'max') 
; 

CREATE TABLE agents 
    (`id` int, `title` varchar(25)) 
; 

INSERT INTO agents 
    (`id`, `title`) 
VALUES 
    (1, 'APERTURE'), 
    (2, 'MESA') 
; 

CREATE TABLE pivot 
    (`contractid` int, `userid` varchar(4), `agentid` varchar(4)) 
; 

INSERT INTO pivot 
    (`contractid`, `userid`, `agentid`) 
VALUES 
    (1, '1', '1'), 
    (1, '2', NULL), 
    (2, NULL, '1'), 
    (2, '2', NULL) 
; 

CREATE TABLE contracts 
    (`id` int, `number` varchar(3), `restricted` int) 
; 

INSERT INTO contracts 
    (`id`, `number`, `restricted`) 
VALUES 
    (1, 'one', 1), 
    (2, 'two', 0) 
; 

와 나는 같은 질문을 할 때 사용자 ID가 2 -> agentid가 NULL 인 행의 피벗 테이블에서 NULL이기 때문에 리턴됩니다.

검색을 올바르게 수행하고 필요한 모든 데이터를 반환하는 방식으로 쿼리를 작성하는 방법. 많은 분들께 감사드립니다.

편집 : 나는

select contracts.*, users.id, agents.title from contracts 
left join pivot on contracts.id = pivot.contractid 
left join agents on pivot.agentid = agents.id 
left join users on pivot.userid = users.id 

where pivot.contractid in (
    select pivot.contractid from pivot where pivot.userid = 2 
) 

ID NUMBER RESTRICTED TITLE 
1 one  1  APERTURE 
1 one  1  (null) 
2 two  0  APERTURE 
2 two  0  (null) 

하지만 (위의 높은 질의의 방식을 반환하는 등의 쿼리와 동일한 결과를 원하는이 스크립트의 결과에서 쿼리와 나는 위선적 인 말투 때문에 제공된 쿼리 (where in) 사용

답변

0

SQL 쿼리에서 무엇을 가져 오시겠습니까? 이것은 올바른 것 같습니다 ..하지만 당신은 무엇을 얻으시겠습니까 이해가 안 돼요 ...

WHERE 절에서 USER_ID = 2에 필터를 사용한 후에 피벗의 user_id = 2가 TRUE 인 행만 가져옵니다 :) AGENT_ID가 NULL 두 행을 얻을 ... 당신이 제목을보고 싶다면, 당신은 테이블 "PIVOT"에 추가해야합니다 .. 좋아 보인다

afteredit :

select c.* 
, u.id 
, a.title 
## 
from pivot p 
## 
left join contracts c 
ON c.id = p.contractid 
## 
left join agents a 
on p.agentid = a.id 
## 
left join users u 
on p.userid = u.id 
## 
where 1=1 

이 나에게 같은 결과를 제공합니다 귀하의 질의로

+0

선생님, 편집 후 내 질문을보십시오. 어떤 아이디어? – ClassyPimp

+0

내 솔루션 "afteredit"보기 –