當select語句包含更多要插入表的列時,可以從select中插入嗎?INSERT SELECT TOP(n)ORDER BY列不包含在目標表中
考慮場景:
INSERT INTO table_1 --table_1 consist only of one column
SELECT TOP 10 col1, col2 --col_2 is only selected because is used in ORDER BY
FROM table_2
ORDER BY col2 DESC
上面的語句將導致錯誤。我會實現這個目標的一種方法是使用子查詢像
INSERT INTO table_1
SELECT TOP 10 col1
FROM (
SELECT col1, col2
FROM table_2
ORDER BY col2 DESC
) AS t
但我不知道是否有例如使用等運營商像UPDATE
語句直接的方式。
UPDATE
我提交簡化的示例道歉。那是因爲我認爲這是理所當然的,這將適用於我的場景,而不用實際測試它。
這是我的查詢的再現範圍內(上sqlfiddle進行試驗安裝了我的家用電腦上沒有SQL服務器)
CREATE TABLE table_1 (id INT)
CREATE TABLE table_2 (id INT, col2 INT)
CREATE TABLE table_3 (id INT, col2 INT)
INSERT INTO table_2 VALUES (1,3),(2,2),(3,1)
INSERT INTO table_3 VALUES (1,3),(1,2),(3,1)
INSERT INTO table_1
SELECT TOP 1 t.id, t.Qty
FROM table_2
INNER JOIN
(
SELECT table_2.id, COUNT(table_3.id) AS Qty
FROM table_2
INNER JOIN table_3 on table_3.id = table_2.id
GROUP BY table_2.id
) AS t ON (t.id = table_2.id)
ORDER BY t.Qty
原始查詢要複雜得多,因此,我想避免另一個子 - 如果這是可能的話。
該查詢結果與錯誤說:
Column name or number of supplied values does not match table definition.: INSERT INTO table_1 SELECT TOP 1 table_1.id FROM table_1 INNER JOIN (SELECT table_2.id, COUNT(table_3.id) AS Qty FROM table_2 INNER JOIN table_3 on table_3.id = table_2.id GROUP BY table_2.id) AS t ON (t.id = table_1.id) ORDER BY t.Qty
您可以通過'col2'命令,而無需實際選擇它。 – GhostGambler
@GhostGambler我怎麼能這樣做?我試過了,但是錯誤的結果是,列的順序必須包含在select語句中。 – Dimt
您的查詢是否真的與示例一樣簡單,還是更復雜?如果涉及任何子查詢,那麼確實無法在子查詢中未選中的列上對父查詢進行排序。 – mellamokb