2016-10-14 12 views
2

這是針對Excel的Invantive Control。Excel的Invantive Control中的SQL錯誤

什麼可能導致在第二個CREATE TABLE錯誤?

CREATE TABLE [email protected] 
AS 
SELECT ID 
,  Code 
,  AddressLine1 
,  Name 
,  Parent 
FROM Accounts 
WHERE ID=$P{P_ACCOUNTID} 

CREATE TABLE [email protected] 
AS 
SELECT ID 
,  Code 
,  AddressLine1 
,  Name 
,  Parent 
FROM Accounts 
WHERE Parent IN (SELECT ID FROM [email protected]) 

CREATE TABLE [email protected] 
AS 
SELECT ID 
,  Code 
,  AddressLine1 
,  Name 
,  Parent 
FROM Accounts 
WHERE Parent IN (SELECT ID FROM [email protected]) 

SELECT * FROM [email protected] 
UNION ALL 
SELECT * FROM [email protected] 
UNION ALL 
SELECT * FROM [email protected] 
+0

嗨,歡迎來到SO。這似乎是你的第一個問題。我建議你通過關於格式化問題的SO指導方針。總是將你的代碼包裝在包裝標籤中。我現在爲你做了mate.Happy編碼! –

+0

你得到的錯誤信息是什麼? –

+1

請注意,結構'where ... in(select ...)'當前會導致IN之後的部分在from的每一行進行評估。 Invantive SQL目前在相關和不相關子查詢之間沒有區別。出於性能方面的原因,您可能希望將其重寫爲聯接而不是in()。 –

回答

2

您可能收到一個錯誤:「標識符'帳戶'不明確。」您可以在必要時添加標識符。

精確聯機帳戶的工作SQL如下所示。請注意,使用create or replace table而不是create table,權限不會更改(如果有),但必要時會先刪除表。

CREATE OR REPLACE TABLE [email protected] 
AS 
SELECT act.ID 
,  act.Code 
,  act.AddressLine1 
,  act.Name 
,  act.Parent 
FROM exactonlinerest..Accounts act 


CREATE OR REPLACE TABLE [email protected] 
AS 
SELECT act.ID 
,  act.Code 
,  act.AddressLine1 
,  act.Name 
,  act.Parent 
FROM exactonlinerest..Accounts act 
join [email protected] n1 
on  n1.id = act.Parent 

CREATE OR REPLACE TABLE [email protected] 
AS 
SELECT act.ID 
,  act.Code 
,  act.AddressLine1 
,  act.Name 
,  act.Parent 
FROM exactonlinerest..Accounts act 
join [email protected] n2 
on  n2.id = act.Parent 

SELECT * FROM [email protected] 
UNION ALL 
SELECT * FROM [email protected] 
UNION ALL 
SELECT * FROM [email protected] 
+0

刪除的下一個問題的答案實際上是最好的答案。有了這個語法,我得到了很好的結果 –