簡體   English   中英

基於主查詢列的子查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM