简单地在两个字段上加入SQL

时间:2013-10-18 00:49:04

标签: mysql sql

基本的SQL问题 - 我是新手,所以请耐心等待......

我正试图以这种方式加入两个领域:

'买家'表:

Name    Date
Greg    Jan 01
John    Jan 01
Greg    Jan 02

'购买'表:

Name    Date     Product    Qty
Greg    Jan 01   Apple      2
Greg    Jan 01   Banana     3
John    Jan 01   Apple      2
Greg    Jan 02   Banana     1

加入表:

Name   Date    Apples   Bananas
Greg   Jan 01  2        3
John   Jan 01  2        0
Greg   Jan 02  0        1

我知道它必须是简单的,但我只是没有得到它。

3 个答案:

答案 0 :(得分:1)

您似乎正在尝试pivot您的搜索结果。您可以使用sumcase

实现此目的
select b.name, 
    b.date, 
    sum(case when product='Apple' then qty end) Apples,
    sum(case when product='Banana' then qty end) Bananas
from buyers b
    join purchases p on b.name = p.name and b.date = p.date
group by b.name, 
    b.date

答案 1 :(得分:0)

如果已加入表名'buyer_purchases',那么sql看起来像:

select buyer_purchases.*,Purchases.* from buyer_purchases,Purchases where buyer_purchases.Name=Purchases.Name and buyer_purchases.Date=Purchases.Date;

答案 2 :(得分:0)

坦率地说,您的数据库结构完全正确。
但是,从这两个表中得到的结果在逻辑上和概念上都是错误的。

首先,您不能将行数据放入列名中,除非您正在聚合它。
行总是动态的。列是静态的。
如果您的数据包含草莓和菠萝,该怎么办?
即使你确定它只包含'苹果'和'香蕉'的数据,如果有拼写错误,其中一个值变为'Bannana'。那么你将无法从中得到准确的结果。

您案例的逻辑数据结构应包含三个表,“买方”,“购买”和“产品”。
但是,无论您产生此类结果的原因是什么,最接近的结果只是分组'买方'和'产品'列,并汇总产品数量。

但无论如何,试试这个查询...这是你的情况最接近的。

SELECT B.Name, P.Date, P.Product, SUM(P.Qty)
FROM Buyers B, Purchases P
WHERE B.Name = P.Name
ORDER BY B.Name
GROUP BY B.Name, P.Product

通过这种方式,您可以了解哪些买家购买了哪些产品,以及他们购买的每种产品的总数量。

祝你好运......