【问题标题】:SQL Table Join, Query IssueSQL 表连接,查询问题
【发布时间】:2014-03-28 18:48:39
【问题描述】:

我将此查询用于连接表,它可以工作,但只返回 1 个值,我想要颜色明智的数据而不是所有数据。这是我的查询及其 fiddle

  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)

【问题讨论】:

  • 你期待什么输出?
  • 查询产生预期结果。你想干什么?
  • @BrijRajSingh 它只返回一个值,而不是从 tbl_productcolor 返回所有值,其中 tbl_product 的 id 与 tbl_productcolor 的 pid 匹配
  • 在我看来像一排。
  • 他可能需要使用连接来获取所有产品及其产品颜色。

标签: mysql sql sql-server join


【解决方案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】:
    select * 
    from tbl_product 
    where id in (select pid 
        from tbl_productcolor 
        where color="Black (79)")
    

    【讨论】:

    • 我希望输出应该显示颜色数据。如果选择的颜色为黑色,则显示颜色为黑色的所有数据产品
    • select * from tbl_product where id in (select pid from tbl_productcolor where color="Black (79)")
    【解决方案3】:

    你到底想要什么。(输出)? 如果你删除(其中 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; 
    

    你可以使用这个查询它应该可以工作。

    【讨论】:

    • 我不想要所有结果,我想要通过加入表格来获取颜色数据。
    • 我希望输出应该显示颜色数据。如果选择的颜色为黑色,则显示颜色为黑色的所有数据产品
    • OK 所有相同颜色的 id 不同。
    【解决方案4】:

    你可以使用以下

    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 或颜色代码名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 2017-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多