【问题标题】:extraction from two tables从两个表中提取
【发布时间】:2012-11-02 11:35:41
【问题描述】:

我有两个正在使用的表格示例 我正在使用输出来构建数组,所以我的输出需要是单列

第一个表是产品列表

    PRODUCT ID    PRODUCT_NAME
    01            product1
    02            product2
    03            product3
    04            product4
    05            product5
    06            product6
    07            product7
    08            product8
    09            product9
    10            product10
    11            product11
    12            product12

表二是购买清单

    SALESID       PRODUCT_NAME       USERID       DATE
    01            product1           001ABC       11-10-2012
    02            product5           001ABC       11-11-2012
    03            product1           002XYZ       11-11-2012
    04            product12          001ABC       11-13-2012
    05            product7           001ABC       11-13-2012
    06            product3           002XYZ       11-14-2012
    07            product11          002XYZ       11-14-2012

现在我需要的是如果我提供像 001ABC 这样的 USERID 如果 USERID 与我提供的匹配并且(它应该自动)出现在产品表中,我需要输出为 1,如果它只出现在产品表中,我需要它显示 0

所以上面两个表的两个例子和这两个 USERID 看起来像这样

提供 USERID 001ABC 产量

  OUTPUT
  1
  0
  0
  0
  1
  0
  1
  0
  0
  0
  0
  1

提供 USERID 002XYZ 产量

  OUTPUT
  1
  0
  1
  0
  0
  0
  0
  0
  0
  0
  1
  0

使用 CASE 语句失败或我的语法不正确 我正在使用 PHP 和 MYSQL

只要我有一个 USERID,我当前的查询就可以正常工作,但当我尝试按 userID 进行过滤时也失败了

PHP/MYSQL 查询:

    SELECT (PURCHASES.PRODUCT_NAME IS NOT NULL) AS purchased 
    FROM PRODUCTS 
      LEFT JOIN PURCHASES 
      ON PRODUCT_NAME = PRODUCT_NAME ORDER BY 1

我不确定我做错了什么。

当我添加另一个购买了两次的用户时,结果似乎只是在输出中添加了两行,因此输出将有 14 行,而不是我展示的示例中原来的 12 行。

我怎样才能获得单列输出,其记录总数等于每行设置为零的产品总数,除非在由产品名称标识的采购表中找到匹配项而不是零1 在输出中。

【问题讨论】:

    标签: php android mysql api


    【解决方案1】:

    这是您想要的查询。您需要按产品 ID 对结果进行排序;您按输出列中的 0/1 值对它们进行排序,这当然会破坏该列的有用性。

    您还需要对过滤后的购买表进行汇总,以确定是否有任何特定产品的购买。那是子查询“b”。

    最后,您离开了从产品到购买的连接,因为您希望每个产品的输出结果集中只有一行。

         select ifnull(b.number>0,0) output
           from products a
      left join (
                  select count(*) number,
                         product_name
                    from purchases
                   where userid = '001ABC'
                group by product_name
               ) b on a.product_name = b.product_name
      order by a.product_id
    

    例如,参见这个 SQL Fiddle。 http://sqlfiddle.com/#!2/6e985/12/0

    【讨论】:

    • 非常感谢您,这完全符合我的期望,而且您的解释更好,我明白了!!!再次感谢。
    猜你喜欢
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    相关资源
    最近更新 更多