這是錯誤:where mySubQ.Something = SomeTable.Something
。
底部查詢從SomeTable
和從子查詢與別名newSubQ
, 所以mySubQ.Something
未在此上下文中已知的選擇。
如果something
是一個真正的列名,不僅是「僞代碼佔位符」,然後還有這裏的另一個錯誤:Select Something
- 列是模糊的,因爲這兩個sometable
和子查詢有此列。
嘗試此查詢:
With mySubQ as (
SELECT * FROM sometable
)
Select newSubQ.Something
From SomeTable,
(
Select *
From mySubQ
where mySubQ.Something >= 0
) newSubQ
where newSubQ.Something = SomeTable.Something
;
演示 - >http://www.sqlfiddle.com/#!4/88855/12
該演示還包含使用WITH
條款的另一個例子:
WITH mySubQ AS (
SELECT *
FROM sometable
),
mySubQ_1 AS (
SELECT *
FROM mySubQ
WHERE somethingelse = 1
),
mySubQ_2 AS (
SELECT *
FROM mySubQ
WHERE something between 2 AND 5
)
SELECT *
FROM sometable s, mySubQ_1 m1,
(
SELECT * FROM mySubQ_2
WHERE something < 10
) m2
WHERE s.something = m1.something
AND m1.somethingelse = m2.somethingelse
您需要的子查詢和'之間的逗號newSubQ'。但是如果你使用ANSI JOIN語法會更好。 – Barmar
我不明白。 newSubQ只是括號內SQL語句的別名吧?你在哪裏建議我放一個逗號? – yudistrange
對不起,我把'newSubQ'與'mySubQ'混淆了。 – Barmar