[英]How to loop through each row in MySQL table and get rows if conditions match
[英]How to loop through SQL table and find rows that match your IF conditions?
这就是我想做的事情。 假设我有一张顾客表(表X),他们进入了像迪斯尼乐园这样的游乐园。 这个客户表格非常详细,包括名称,年龄,种族,收入水平,邮政编码等列,以及他们进入公园时的时间戳。
对于表X中的每一行,我想查询另一个客户信息表(表Y),以识别与所讨论的行具有共同特征的所有其他客户,以及谁在较早的时间点进入迪士尼乐园。
例如,从表X中我看到Joe是一名来自德克萨斯州的49岁男子,他在2013年6月10日访问迪斯尼乐园时赚了70,000美元。当我的循环在Joe的行上时,我想搜索表Y所有49来自德克萨斯州的几岁男性,他们也赚了7万美元但是在乔之前访问了迪士尼乐园。 我想将表X行和表Y的结果组合在一起(聚集在一起)。 在SQL中执行此操作的最佳方法是什么?
如果它是VB我知道如何使用For Next语句在里面使用For Next循环。 但是数据是在SQL数据库中,我想学习如何做等效的。
(使用SQL Server Management Studio)
您应该能够使用INNER JOIN
。
就像是:
SELECT
-- [whatever columns you need]
FROM TableZ t1
INNER JOIN TableZ t2 on t1.Salary=t2.Salary
AND t1.Gender=t2.Gender
AND t1.ResidenceState=t2.ResidenceState
AND t1.VisitDate > t2.VisitDate
WHERE t1.Salary=70000
AND t1.Gender='Male'
AND t1.ResidenceState='TX'
显然,假设表中的列名和数据类型。 JOIN
条件将根据您要匹配的信息而有所不同。
我想你可以这样做:
方法1:加入
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:交叉应用 (更复杂)
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的行都符合要求,而不需要循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.