【问题标题】:Query to join tables [closed]查询连接表[关闭]
【发布时间】:2013-11-15 22:53:58
【问题描述】:

我有 3 张桌子: 产品、类别和 product_to_category。

产品

id     name
1      monitor
2      computer
3      speaker
4      lcd
5      microphone

类别

id     name
1      displays
2      speakers

product_to_category

id     product_id      category_id
1      1               1
2      4               1
3      3               2

我需要这样的东西:“扬声器”类别中的所有产品以及不属于任何类别的产品(计算机和麦克风)

product_id   product_name
2            computer
3            speaker
5            microphone

我需要一个查询。我已经完成了两个查询,但我需要一个查询,因为 http://datatables.net/

【问题讨论】:

    标签: mysql sql join


    【解决方案1】:

    备用WHERE子句:

    SELECT product.id, product.name
    FROM product
    LEFT JOIN product_to_category AS ptc
      ON product.id = ptc.product_id
    WHERE IFNULL(ptc.category_id, 0) IN(0, 2);
    

    SQL 小提琴链接:http://sqlfiddle.com/#!2/7aaeff/8

    【讨论】:

    • 工作!!!我刚刚添加了“GROUP BY product.id”
    【解决方案2】:

    试试

    Select 
      Product.id,product.name
    From
      product 
        left outer join product_to_category As ptc 
        on product.id = ptc.product_id
    Where 
      ptc.category_id = 2 
      or 
      isnull(ptc.id,0)=0
    Group by 
      product.id, product.name
    

    如果使用 mysql,请使用 ifnull 而不是 isnull..

    【讨论】:

    • 我正在使用 mysql。不行。现在,仅当产品在类别中时才返回行。如果产品在多个类别中,则将所有类别作为一行返回。我希望每个产品只显示一次。如果有多个类别,则忽略所有其他类别。
    • 我为糟糕的解释道歉。我一般是论坛的新手
    • 这个解决方案确实有效。这是使用您的示例信息的 SQL Fiddle 链接,以及此解决方案的结果(与您的预期结果相匹配):sqlfiddle.com/#!2/7aaeff/6
    • 这个例子有效。我应该输入一个更广泛的表格。在我的真实表中不起作用
    • @user2997954 更新了独特结果的答案..
    猜你喜欢
    • 2016-04-11
    • 2019-05-31
    • 2021-01-28
    • 2014-07-18
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多