我正在處理從 websiteTestLocation 表中洗掉記錄的查詢(其中 websiteSnapshotStartTime 早于 X 天)。
(截斷的)表結構如下所示:
| 表名 | 柱子 |
|---|---|
| 網站快照 | 網站快照記錄 ID |
| 網站快照 | 網站快照開始時間 |
| 網站 | 網站快照記錄 ID |
| 網站 | 網站記錄 ID |
| 網站測驗位置 | 網站記錄 ID |
websiteTestLocation 表的“websiteRecordId”鏈接到網站表中的同一列,網站表的“websiteSnapshotRecordId”鏈接到 websiteSnapshot 表中的同一列。
我可以使用以下方法獲取所有 websiteSnapshot 記錄(超過 1 天):
SELECT (websiteSnapshotId)
FROM [dbo].websiteSnapshot
WHERE websiteSnapshotStartTime IN (
SELECT
(websiteSnapshotStartTime)
FROM
[dbo].websiteSnapshot
WHERE
websiteSnapshotStartTime < DATEADD(day, -1, GETDATE())
)
但是當我將其包含在我的其余查詢中時,我得到了錯誤:
子查詢回傳超過 1 個值。當子查詢跟隨 =、!=、<、<=、>、>= 或子查詢用作運算式時,這是不允許的。
整個查詢如下所示:
--DELETE FROM [dbo].websiteTestLocation wtl
select * FROM [dbo].websiteTestLocation wtl
LEFT JOIN [dbo].website w ON w.websiteRecordId = wtl.websiteRecordId
LEFT JOIN [dbo].websiteSnapshot snap ON snap.websiteSnapshotId IN (w.websiteSnapshotId)
WHERE (SELECT (websiteSnapshotId)
FROM [dbo].websiteSnapshot
WHERE websiteSnapshotStartTime IN (
SELECT
(websiteSnapshotStartTime)
FROM
[dbo].websiteSnapshot
WHERE
websiteSnapshotStartTime < DATEADD(day, -1, GETDATE())
)) = snap.websiteSnapshotId
GO
我明白,因為“foreach”回圈會有所幫助,所以我一定做錯了什么。如果我將“MAX”放在第 5 行的“websiteSnapshotId”前面和第 9 行的 websiteSnapshotStartTime 前面,那么我會得到資料,但不是所有預期的行。我只從“最新”網站SnapshotStartTime 早于 1 天的記錄中獲取資料。
uj5u.com熱心網友回復:
一點一點地分解你的查詢。
從表面上看,這一點看起來不錯
select * FROM [dbo].websiteTestLocation wtl
LEFT JOIN [dbo].website w ON w.websiteRecordId = wtl.websiteRecordId
但是下一個 JOIN 無處不在。看起來您正試圖將 LEFT OUTER JOIN 限制為表中的記錄website
LEFT JOIN [dbo].websiteSnapshot snap ON snap.websiteSnapshotId IN (w.websiteSnapshotId)
使用 an INNER JOINinstead 和 thisON子句
ON snap.websiteSnapshotId = w.websiteSnapshotId
接下來是您的WHERE條款 - 這是您報告的問題的來源。您正在嘗試將單個值與值串列匹配,這將永遠無法正常作業。所有這些
WHERE (SELECT (websiteSnapshotId)
FROM [dbo].websiteSnapshot
WHERE websiteSnapshotStartTime IN (
SELECT
(websiteSnapshotStartTime)
FROM
[dbo].websiteSnapshot
WHERE
websiteSnapshotStartTime < DATEADD(day, -1, GETDATE())
)) = snap.websiteSnapshotId
可以替換為
WHERE websiteSnapshotStartTime < DATEADD(day, -1, GETDATE())
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/478223.html
