2015-10-06 13 views
5

tôi có hai bảngLàm thế nào tôi có thể tránh trùng lặp khi tham gia hai bảng

1. test 1 

    2. test 2 

bảng đầu tiên có

**id** - **name** 

1  - kerala 

2  - Tamilnadu 

bảng Second

**name** - **jid** 

    value 1 - 1 

    value 2 - 1 

    value 3 - 1 

    value 4 - 1 

    value 5 - 2 

My Query -

SELECT t1.name, t2.name 
FROM test1 t1 
INNER JOIN test2 t2 
WHERE t1.id = t2.jid 

bây giờ tôi có được kết quả này

**name** - **name** 

Kerala - value 1 

kerala - value 2 

kerala - value 3 

kerala - value 4 

Nhưng tôi cần một kết quả như

này
Kerala - value 1 

     - value 2 

     - value 3 

     - value 4 

giá trị 'Kerala' không nên lặp lại.

+4

gì bạn đang yêu cầu thường được thực hiện trong lớp để hiển thị dữ liệu, không phải là người mà tạo ra nó. Do đó, bạn nên giữ cho SQL bạn có và loại bỏ các bản sao trong các lớp khác nhau của giải pháp của bạn. –

Trả lời

2

bạn có thể sử dụng method.Pls Nhóm concat kiểm tra dưới đây truy vấn

SELECT t1.name,GROUP_CONCAT(t2.name) FROM test1 t1 INNER JOIN test2 t2 WHERE t1.id = t2.jid 
+0

Cảm ơn bạn. nó hoạt động hoàn hảo :) –

0

Tôi không nghĩ rằng điều đó là có thể - bạn không thể có giá trị trống bên trong giá trị trả lại.

1

Bạn có thể sử dụng các truy vấn sau đây:

SELECT CASE 
      WHEN t2.name = t3.firstName THEN t1.name 
      ELSE '' 
     END AS name, 
     t2.name 
FROM test1 t1 
INNER JOIN test2 t2 ON t1.id = t2.jid 
INNER JOIN (
    SELECT jid, MIN(name) AS firstName 
    FROM test2 
    GROUP BY jid) AS t3 ON t2.jid = t3.jid 

này sẽ tạo ra kết quả cần thiết miễn là có một hồ sơ duy nhất có MIN(name) mỗi jid trong bảng test2.

Demo here

1

thử này

SELECT IF (@oldname = name1,'',name1), 
     name2, 
     @oldname:=name1 AS oldname FROM 
    (
    SELECT t1.name AS name1, t2.name AS name2 
    FROM test1 t1 
    INNER JOIN test2 t2 
    WHERE t1.id = t2.jid 
) t, 
    (SELECT @oldname:='') tmp; 
Các vấn đề liên quan