2014-02-26 68 views
1

我使用這個查詢連接表,它的工作原理,但只返回1值,我想顏色明智的數據不是所有的數據。這是我的查詢和fiddleSQL表加入,查詢問題

SELECT *, 
     (SELECT pname 
      FROM tbl_product 
      WHERE id = tbl_productcolor.pid 
     ) as productname, 
     (SELECT image 
      FROM tbl_product 
      WHERE id = tbl_productcolor.pid 
     ) as image 
    FROM tbl_productcolor 
    WHERE id = 1 
ORDER BY id ASC; 

,這裏是我的兩個表

tbl_product

id  category  pcode  pname  image 
----------------------------------------------------- 
1  cat1   567   product1 img1.jpg 
2  cat2   544   product2 img2.jpg 
3  cat3   5665  product3 img3.jpg 
4  cat1   5665  t1   img4.jpg 
5  cat1   567   t5   img5.jpg 
6  cat3   75   t8   img6.jpg 
7  cat4   12   name  img7.jpg 

tbl_productcolor

id   pid   color 
----------------------------- 
1   1   Black (79) 
2   1   Grey (205) 
3   1   Green (69) 
4   1   Blue (89) 
5   1   Purple (14) 
6   1   Yellow (31) 
7   1   Brown (124) 
8   1   Beige (95) 
9   1   Cream (164) 
10   1   White (09) 
11   2   Multi-coloured (113) 
12   2   Black (79) 
13   3   Pattern (84) 
14   3   Metallic (48) 
15   3   Black (79) 
16   3   Orange (29) 
17   3   Beige (95) 
18   4   Green (69) 
19   4   Red (33) 
20   4   Yellow (31) 
21   4   Brown (124) 
22   4   Beige (95) 
23   4   White (09) 
24   5   Black (79) 
25   5   Green (69) 
26   5   Purple (14) 
27   5   Red (33) 
28   6   Metallic (48) 
29   6   Black (79) 
30   6   Grey (205) 
31   6   Green (69) 
32   6   Purple (14) 
33   6   Pink (20) 
34   6   Red (33) 
35   7   Pattern (84) 
36   7   Multi-coloured (113) 
37   7   Metallic (48) 
38   7   Black (79) 
39   7   Grey (205) 
40   7   Green (69) 
41   7   Blue (89) 
42   7   Purple (14) 
43   7   Pink (20) 
44   7   Red (33) 
45   7   Orange (29) 
46   7   Yellow (31) 
47   7   Brown (124) 
48   7   Beige (95) 
49   7   Cream (164) 
50   7   White (09) 
+1

你期待什麼輸出? –

+0

查詢產生預期結果。你在想什麼? –

+0

@BrijRajSingh它只返回一個值,代替從tbl_productcolor返回所有值,其中tbl_product的id匹配tbl_productcolor的pid –

回答

1

如果我把它正確的話,你需要正常化tbl_productcolor表,使你的生活更容易一點。

你應該分成兩個表格:

tbl_productcolor 

id   pid  color_id 
----------------------------- 
1   1  1 
29   6  1 
2   1  2 
30   6  2 

tbl_colors 

id name 
---------------------- 
1 Black (79) 
2 Grey (205) 

對於當前的結構有一個查詢我猜你需要:

select 
C1.ID, 
C1.PID, 
c1.color, 
p.pname, 
p.image 
FROM tbl_productcolor C1 
JOIN tbl_productcolor C2 ON C1.Color=C2.Color AND C2.ID=1 
JOIN tbl_product p ON C1.PID=p.ID 

order by p.id asc ; 

SQLFiddle demo

2

你想要什麼(輸出)? 如果你刪除(其中id = 1),那麼你得到的所有結果;

SELECT prdc.id, 
     prdc.pid, 
     prdc.color, 
     pr.pname, 
     pr.image 
FROM tbl_productcolor prdc 
     INNER JOIN tbl_productcolor prd 
       ON prdc.color = prd.color 
        AND prd.id = 2 
     INNER JOIN tbl_product pr 
       ON prdc.pid = pr.id; 

你可以使用這個查詢它應該是工作。

+0

我不想要所有結果,我希望即通過加入表格來識別顏色明智的數據。 –

+0

我希望輸出應該顯示,顏色明智的數據。如果選擇的顏色爲黑色,則顯示顏色爲黑色的所有數據產品 –

+0

確定所有相同的顏色標識不同。 – Tehsil

0
select * 
from tbl_product 
where id in (select pid 
    from tbl_productcolor 
    where color="Black (79)") 
+0

我希望輸出應該顯示,顏色明智的數據。如果選擇的顏色爲黑色,則顯示顏色爲黑色的所有數據產品 –

+0

select * from tbl_product where id in(從tbl_productcolor選擇pid,其中color =「Black(79)」) – rjhdby

0

您可以使用下面

SELECT P.Id, 
     PC.Id AS ColorId, 
     PC.color 
FROM tbl_product P 
INNER JOIN tbl_productcolor PC 
     ON P.Id=PC.PId 
WHERE PC.Color='Black (79)' 

您還可以使用子表ID或顏色代號。