SQLite查询按另一个表中的条件排序?

时间:2011-04-19 18:02:45

标签: sql sqlite join

我有一个SQLite数据库表'products',其中包含一个项目列表,每个项目都有一个类别和一个估计的利润。像

这样的东西
|id | product  | category_id  | profit | customer_id |
|---|----------|--------------|--------|-------------|
| 1 | product1 | 1            | 15     | 0           |
| 2 | product2 | 2            | 10     | 0           |
| 3 | product3 | 1            |  9     | 0           |
| 4 | product4 | 2            | 12     | 0           |

我还有一个表'客户'可以选择产品,每个产品一个。客户有一个他们想要选择的首选类别和一个选择顺序:

|id | name        | category_id  | order |
|---|-------------|--------------|-------|
| 1 | customer1   | 2            | 1     |
| 2 | customer2   | 1            | 2     |
| 3 | customer3   | 1            | 3     |

每个产品都是不同的,因此只有其他客户可以选择它,这就是客户订单很重要的原因。我想根据客户的首选类别和订单订购产品的订单,假设客户将始终选择该类别中剩余的最高利润产品。类似的东西:

|name        | product      | profit |
|------------|--------------|--------|
|customer1   | product4     | 12     |
|customer2   | product1     | 15     |
|customer3   | product3     |  9     |

我知道我可以加入类别列上的表格,我可以按客户订单订购列表,但我不知道如何强制约束每个产品可以被选中但只有一次。

例如

SELECT customers.name, products.name, products.profit
  FROM customers INNER JOIN products ON customers.category_id = products.category_id
  ORDER BY customers.order, products.profit

只列出所有与所有产品交叉的客户:

|name        | product      | profit |
|------------|--------------|--------|
|customer1   | product4     | 12     |
|customer1   | product2     | 10     |
|customer2   | product1     | 15     |
|customer2   | product3     |  9     |
|customer3   | product1     | 15     |
|customer3   | product3     |  9     |

你能帮我写一个正确的查询吗?

更新:编辑上面的表格以包含答案中的一些想法。假设products.customer_id = 0表示未选择的产品,我可以编写以下查询。

UPDATE products SET customer_id = customers.id 
WHERE products.customer_id = 0 AND products.category_id = customers.category_id

我不希望这完全符合我的要求,因为它还没有解决利润列,我不确定这个查询实际上如何处理wrt customer_id。我会测试一下然后回答。

1 个答案:

答案 0 :(得分:1)

啊,我想我起初误解了这个问题。让我再试一次......

如何在产品中添加“user_id”列,以指定选择了哪个用户。

如果某个产品只能由一个用户选择,您需要某种方式知道它已被选中,以及由谁选择。我可能误解了你在这里所做的事情,但听起来你正在尝试将产品选择(取决于首选类别,最大利润和已经选择的内容)与查询结果的附加步骤结合起来。您可能需要将此步骤分为两个步骤:

  1. 在您的代码中,找出谁根据您的条件获取哪个产品,并在数据库中将其标记为。
  2. 运行结果查询。
  3. 我不知道你是否可以在SQL查询中执行产品选择步骤,除非你将它与一些疯狂的复杂子查询结合起来,即便如此我也不确定它是否可行。如果将其分为两步,您的代码将变得简单,结果查询也将如此。