2013-05-03 69 views
1

enter image description here多加入同一个表,甲骨文

我想下面的查询

SELECT Customer.*, 
     ElectrnicItem.Product1 AS ElectronicItem1, 
     ElectrnicItem.Product2 AS ElectronicItem2, 
     ElectrnicItem.Product3 AS ElectronicItem3, 
     ApparelItem.Product1 AS ApparelItem1, 
     ApparelItem.Product2 AS ApparelItem2, 
     ApparelItem.Product3 AS ApparelItem3 
FROM Customer 
LEFT JOIN Inventory AS ElectrnicItem 
ON (Customer.CustomerID = ElectrnicItem.CustomerID) 
LEFT JOIN Inventory AS ApparelItem 
ON (Customer.CustomerID = ApparelItem.CustomerID) 

但它总是返回:含糊不清的

ORA-00918列

+0

您是否可以将Customer. *分解为Customer.CustomerID,Customer.CustomerName?不知道这是否是问题。 – Hazaart 2013-05-03 09:09:19

+0

客户表中的列名称是什么? – Nagasaki 2013-05-03 09:10:52

+0

你可以用'CREATE TABLE'语句替换图像吗?发布实际代码(我们可以复制和粘贴以测试自己的文本)通常比代码图片更好。 – 2013-05-03 09:12:37

回答

0

您错过了任何谓词来标识清单中的行为'Elec tronic“或”服装“。不知道这是修复。

0

这个怎么样?

SELECT a.customer_id, a.customer_name, b.product1 electronicitem1, 
     b.product2 electronicitem2, b.product3 electronicitem3, 
     c.product1 apparelitem1, c.product2 apparelitem2, 
     c.product3 apparelitem3 
FROM customer a, inventory b, inventory c 
WHERE a.customer_id = b.customer_id(+) 
    AND b.product_type(+) = 'Electronic' 
    AND a.customer_id = c.customer_id(+) 
    AND c.product_type(+) = 'Apparel'; 
0

我创建了表Customer和Inventory,还插入了您提供的值。以下是查询:

select customer.*,ElectrnicItem.Product1 as ElectronicItem1, 
ElectrnicItem.Product2 as ElectronicItem2, 
ElectrnicItem.Product3 as ElectronicItem3, 
ApparelItem.Product1 as ApparelItem1, 
ApparelItem.Product2 as ApparelItem2, 
ApparelItem.Product3 as ApparelItem3 
from customer 
left join inventory as ElectrnicItem on 
(customer.CustomerID = ElectrnicItem.CustomerID) 
left join inventory as ApparelItem 
on (customer.CustomerID = ApparelItem.CustomerID) 

它工作正常,并给出以下结果:

1 David Miller mobile headphone trimmer mobile headphone trimmer 
    2 Johnson   jeans tshirt  NULL jeans tshirt  NULL    
    3 Diggs   NULL NULL  NULL NULL NULL  NULL    

你提到的预计产量将永远无法实现。由于Customer表包含CustomerIdCustomerName,Customer.*将检索CustomerIdCustomerName。因此CustomerName列不能包含任何NULL 值。

0

好吧,有点晚了,但是... 您不能使用AS来为Oracle中的表格别名,只能为列别名。尝试从表别名中删除所有这些AS:

SELECT Customer.*, 
     ElectrnicItem.Product1 AS ElectronicItem1, 
     ElectrnicItem.Product2 AS ElectronicItem2, 
     ElectrnicItem.Product3 AS ElectronicItem3, 
     ApparelItem.Product1 AS ApparelItem1, 
     ApparelItem.Product2 AS ApparelItem2, 
     ApparelItem.Product3 AS ApparelItem3 
FROM Customer 
LEFT JOIN Inventory ElectrnicItem 
ON (Customer.CustomerID = ElectrnicItem.CustomerID) 
LEFT JOIN Inventory ApparelItem 
ON (Customer.CustomerID = ApparelItem.CustomerID)