我想你可以這樣做:
方法1:JOIN
SELECT Name, Age, Salary, VisitDate, Gender, State
FROM
(
SELECT TY.Name, TY.Age, TY.Salary,
TY.VisitDate, TY.Gender, TY.State
FROM TableX TX
INNER JOIN TableY TY
ON TY.Age=TX.Age AND TY.Salary=TX.Salary
AND TY.Gender=TX.Gender AND TY.State=TX.State
AND TY.VisitDate<TX.VisitDate
WHERE TX.Name = 'Joe' AND ...
UNION ALL
SELECT TX.Name, TX.Age, TX.Salary, TX.VisitDate, TX.Gender, TX.State
FROM TableX TX
WHERE TX.Name = 'Joe' AND ...
) A
方法2:CROSS APPLY(更復雜)
SELECT Name, Age, Salary, VisitDate, Gender, State
FROM
(
SELECT TYCA.Name, TYCA.Age, TYCA.Salary,
TYCA.VisitDate, TYCA.Gender, TYCA.State
FROM TableX TX
CROSS APPLY
(
SELECT TY.Name, TY.Age, TY.Salary,
TY.VisitDate, TY.Gender, TY.State
FROM TableY
WHERE TY.Age=TX.Age AND TY.Salary=TX.Salary
AND TY.Gender=TX.Gender AND TY.State=TX.State
AND TY.VisitDate<TX.VisitDate
) TYCA
WHERE TX.Name = 'Joe' AND ...
UNION ALL
SELECT TX.Name, TX.Age, TX.Salary, TX.VisitDate, TX.Gender, TX.State
FROM TableX TX
WHERE TX.Name = 'Joe' AND ...
) A
如果你把WHERE TX.Name = 'Joe' AND ...
,查詢將爲您提供所有TableX的行,並且所有TableY的行都符合requirem而不需要循環。
如果表X已經有了這些信息,爲什麼其他客戶的行會在表Y中?請提供示例表結構和數據。 –
你正在使用哪些DBMS?儘可能避免在SQL中循環。這應該能夠通過設置操作發生。 – squillman
@Martin老實說,我把我關心的顧客分成了表X.但實際上,這些都在一個表中,我們稱之爲表Z.因此,對於我關心的每個顧客(一組),我想運行一個根據表Z查詢是否有其他類似的客戶早日進入迪士尼樂園。 – phan