2014-07-18 3 views
0

나는이 두 :이 첫 번째 테이블에서 첫 번째 행에 한 번만 보여

Firest 표 : 표

id | text 
------------- 
1  t1  
2  t2   
... 

두 번째 테이블 : 표 2

id | idTable1 | text2 
------------------------------- 
1  1   text1Table2 
2  1   text2Table2 
3  1   text3Table2 
4  2   text4Table2 
5  2   text5Table2 
... 

가입하고 난 LEFT 할 경우 :

SELECT * FROM table1 t1 LEFT JOIN table2 t2 ON t1.id=t2.idTable1 

결과는 다음과 같습니다. 이 :

id | text | id | idTable1 | text2 
------------------------------------------ 
1  t1  1 1   text1Table2 
1  t1  2 1   text2Table2 
1  t1  3 1   text3Table2 
2  t2  4 2   text4Table2 
2  t2  5 2   text5Table2 
... 

하지만 난 첫 번째 테이블에서 중복되는 행은 다음과 같이 한 번만 표시 할 :

id | text | id | idTable1 | text2 
------------------------------------------ 
1  t1  1 1   text1Table2 
1  -  2 1   text2Table2 
1  -  3 1   text3Table2 
2  t2  4 2   text4Table2 
2  -  5 2   text5Table2 
... 

편집 : 와 MySQL보기

에 추가하려면이 결과
+0

에 대한 (즉, 가장 낮은 table2.id있다) 행이 처음 여부를 확인하는 case 문 및 하위 쿼리를 사용할 수 있습니다 LL? –

+1

이 질문은, 아주 유사 하나 몇 분 전에 요청했다 : http://stackoverflow.com/questions/24833254/how-can-i-query-table-within-table –

+0

내가 조인에서 모든 데이터 whant하지만 't1'은 3 번 보여 주지만 첫 번째 시간 만 보여주고 나머지는'''로 바꾸십시오. – TotPeRo

답변

1

당신은 당신이 NU을 의미합니까 주어진 table2.idTable

CREATE VIEW myView AS SELECT 
    t1.id id1, 
    (CASE 
     WHEN t2.idTable1 IS NULL OR NOT EXISTS (
      SELECT 1 
      FROM table2 t3 
      WHERE t3.idTable1 = t2.idTable1 
      AND t3.id < t2.id 
     ) THEN t1.text ELSE '-' 
    END) text1, 
    t2.id id2,  
    t2.idTable1, 
    t2.text2 
FROM table1 t1 
LEFT JOIN table2 t2 ON t1.id = t2.idTable1 
+0

이것은 결과입니다. 당신은 좋은 사람입니다 ... 텍사스 – TotPeRo

2

이 사용하는 변수를 수행 할 수 있습니다

SELECT t1.id, 
     if(@prevtext = text, '-', if(@prevtext := text, t1.text, t1.text)) as text, 
     t2.id, t2.idTable1, t2.text2 
FROM table1 t1 LEFT JOIN 
    table2 t2 
    ON t1.id = t2.idTable1 CROSS JOIN 
    (select @prevtext := '') vars 
ORDER BY t1.id, t1.text; 

그러나 나는 이것을하지 못하게합니다. SQL의 결과 세트는 테이블과 동일한 특성을가집니다. 즉, 각 행은 다른 행과 독립적입니다. 이 형식으로 데이터를 넣으면 결과 집합의 특정 순서가 필요하므로 더 이상 SQL 테이블의 속성을 갖지 않습니다.

는 편집 :

나는이 뷰와 호환 하위 쿼리와 함께 할 불가능하다고 생각했지만, 그것은 데이터를 제공 할 수 있습니다합니다 (T2 ID가 정렬됩니다) 조회 :

SELECT t1.id, 
     (case when text = (select text 
          from table2 tt2 
          where tt2.id < t2.id 
          order by tt2.id desc 
          limit 1 
         ) 
      then '-' else text 
     end) as text 
     t2.id, t2.idTable1, t2.text2 
FROM table1 t1 LEFT JOIN 
    table2 t2 
    ON t1.id = t2.idTable1 
ORDER BY t1.id, t2.id; 
+0

이것은 결과입니다. .... goood 이제 뷰에서 변수를 지원하지 않기 때문에 뷰에 어떻게 추가 할 수 있습니까? – TotPeRo

+0

@TotPeRo. . . 내가 대답 한 후에 당신이 질문을 바꿨습니다. 최소한 뷰에서는이를 쉽게 수행 할 수 없습니다. –

+0

@ GordenLinoff 죄송합니다. 이후에 질문을 편집하기 때문에 ... 나는 변수가있는 응답 일 것이라고는 생각하지 않았습니다. 그러나 응답이 좋고 투표 할 수있는 기회가 하나 있습니다. 보기를 만들기 위해 쿼리를 도와 주시겠습니까? 당신은 결과를 변경하는 것이 좋습니다되지 않습니다. 나는 PHP 페이지에서 더미 데이터를 인쇄하기 때문에 나는이 결과를 원한다. – TotPeRo

관련 문제