使用 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 列)?

只需使用 INEXISTSJOIN 子句:

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