使用 Python 从 SQL 服务器中的两个表进行查询
Using Python to query from two tables in SQL Server
目前正在使用下面的代码从一个 table 中获取数据给定的 WHERE
& AND
条件:
import pyodbc
import pandas as pd
conn = pyodbc.connect('Driver={SQL Server};'
'Server=XYZ\DA202P;'
'Database=Reporting;'
'Trusted_Connection=yes;')
cursor = conn.cursor()
query = pd.read_sql("""
SELECT PID,NewValue,OriginalValue FROM Inc.ProblemAu
where (ModifiedDate >= '2019-06-01 00:00:00.000' and ModifiedDate <= '2019-06-21 23:59:59.99')
AND (NewValue='ntfy')
""",conn)
query.to_excel('c:/temp/pydbc.xlsx')
还有另一个 table Inc.Problem,如果 PID 来自 运行 上的 Inc.Problem,我需要获取列 PID、X、y、z ]金。上述代码的结果可能包含重复的 PID,但在其他列中包含唯一值。
如何根据上述代码生成的所有唯一 PID 值从第二个 table Inc.Problem 获取数据(x、y、z 列)?
只需使用 IN
、EXISTS
或 JOIN
子句:
IN
SELECT PID, x, y, z
FROM Inc.Problem
WHERE PID IN
(SELECT PID
FROM Inc.ProblemAu
WHERE (ModifiedDate >= '2019-06-01 00:00:00.000'
AND ModifiedDate <= '2019-06-21 23:59:59.99')
AND (NewValue='ntfy')
)
EXISTS
SELECT PID, x, y, z
FROM Inc.Problem main
WHERE EXISTS
(SELECT 1
FROM Inc.ProblemAu sub
WHERE (sub.ModifiedDate >= '2019-06-01 00:00:00.000'
AND sub.ModifiedDate <= '2019-06-21 23:59:59.99')
AND (sub.NewValue='ntfy')
AND main.PID = sub.PID
)
JOIN
SELECT main.PID, main.x, main.y, main.z
FROM Inc.Problem main
INNER JOIN
(SELECT DISTINCT PID
FROM Inc.ProblemAu sub
WHERE (ModifiedDate >= '2019-06-01 00:00:00.000'
AND ModifiedDate <= '2019-06-21 23:59:59.99')
AND (NewValue='ntfy')
) sub
ON main.PID = sub.PID
目前正在使用下面的代码从一个 table 中获取数据给定的 WHERE
& AND
条件:
import pyodbc
import pandas as pd
conn = pyodbc.connect('Driver={SQL Server};'
'Server=XYZ\DA202P;'
'Database=Reporting;'
'Trusted_Connection=yes;')
cursor = conn.cursor()
query = pd.read_sql("""
SELECT PID,NewValue,OriginalValue FROM Inc.ProblemAu
where (ModifiedDate >= '2019-06-01 00:00:00.000' and ModifiedDate <= '2019-06-21 23:59:59.99')
AND (NewValue='ntfy')
""",conn)
query.to_excel('c:/temp/pydbc.xlsx')
还有另一个 table Inc.Problem,如果 PID 来自 运行 上的 Inc.Problem,我需要获取列 PID、X、y、z ]金。上述代码的结果可能包含重复的 PID,但在其他列中包含唯一值。
如何根据上述代码生成的所有唯一 PID 值从第二个 table Inc.Problem 获取数据(x、y、z 列)?
只需使用 IN
、EXISTS
或 JOIN
子句:
IN
SELECT PID, x, y, z
FROM Inc.Problem
WHERE PID IN
(SELECT PID
FROM Inc.ProblemAu
WHERE (ModifiedDate >= '2019-06-01 00:00:00.000'
AND ModifiedDate <= '2019-06-21 23:59:59.99')
AND (NewValue='ntfy')
)
EXISTS
SELECT PID, x, y, z
FROM Inc.Problem main
WHERE EXISTS
(SELECT 1
FROM Inc.ProblemAu sub
WHERE (sub.ModifiedDate >= '2019-06-01 00:00:00.000'
AND sub.ModifiedDate <= '2019-06-21 23:59:59.99')
AND (sub.NewValue='ntfy')
AND main.PID = sub.PID
)
JOIN
SELECT main.PID, main.x, main.y, main.z
FROM Inc.Problem main
INNER JOIN
(SELECT DISTINCT PID
FROM Inc.ProblemAu sub
WHERE (ModifiedDate >= '2019-06-01 00:00:00.000'
AND ModifiedDate <= '2019-06-21 23:59:59.99')
AND (NewValue='ntfy')
) sub
ON main.PID = sub.PID