[英]Subquery based on column in main query
我正在尋求幫助,根據 table1 中的列在 table2 上使用子查詢構建 SQL 查詢,但 table1 和 table2 沒有關系。
就像是
SELECT name, address, dateCreated,
(SELECT itemId FROM table2 WHERE itemDate BETWEEN dateCreated AND DATEADD(ss,10,dateCreated) as item
FROM table1
因此,對於每一行,必須根據該行的 dateCreated 從 table2 中選擇“項目”。
您可以嘗試使用IF EXISTS
,如下所示。
SELECT name
, [address]
, dateCreated
FROM table1
where exits(
SELECT itemId
FROM table2 WHERE itemDate BETWEEN dateCreated AND DATEADD(ss, 10,dateCreated) and table1.ItemId = table2.ItemId)
SELECT name, address, dateCreated, table2.itemId
from table1 LEFT JOIN table2 WHERE itemDate BETWEEN dateCreated AND DATEADD(ss,10,dateCreated)
如果您最多需要table2
一項,那么您的方法很好,但您想要top (1)
:
SELECT t1.name, t1.address, t1.dateCreated,
(SELECT TOP (1) t2.itemId
FROM table2 t2
WHERE t2.itemDate BETWEEN t1.dateCreated AND DATEADD(second, 10, t1.dateCreated
) as item
FROM table1 t1;
您也可以將其表述為橫向連接,使用outer apply
:
SELECT t1.name, t1.address, t1.dateCreated,
t2.itemId
FROM table1 t1 OUTER APPLY
(SELECT TOP (1) t2.itemId
FROM table2 t2
WHERE t2.itemDate BETWEEN t1.dateCreated AND DATEADD(second, 10, t1.dateCreated
) t2;
這使得選擇多個列變得容易。
你能試試下面的邏輯嗎? 如果在 table2 中針對 table1 中的任何行找到多個記錄,則嘗試的方法將通過 ERROR。
SELECT A.name,
A.address,
A.dateCreated,
B.itemId
FROM table1 A
INNER JOIN table2 B
ON B.itemDate BETWEEN A.dateCreated AND DATEADD(ss,10,A.dateCreated)
通過上述查詢,您將根據應用於 Date --BETWEEN A.dateCreated AND DATEADD(ss,10,A.dateCreated) 的邏輯為 table1 中的每一行獲得 N 行數
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.