Sql 如何组合两个查询?

Sql 如何组合两个查询?,sql,sql-server,azure-sql-database,Sql,Sql Server,Azure Sql Database,我正在尝试查找此查询的结果: SELECT * FROM Table1 WHERE ColumnX in (SELECT DISTINCT ColumnX FROM Table2 UNION SELECT DISTINCT ColumnY FROM Table2) 它还通过DateAddedToMarket过滤结果,DateAddedToMarket是表1中使用此查询的一列: DateAd

我正在尝试查找此查询的结果:

SELECT * 
FROM   Table1 
WHERE  ColumnX in (SELECT DISTINCT ColumnX FROM Table2 
                   UNION
                   SELECT DISTINCT ColumnY FROM Table2)
它还通过DateAddedToMarket过滤结果,DateAddedToMarket是表1中使用此查询的一列:

         DateAddedToMarket >= '2018-01-01' 
AND      DateAddedToMarket < '2018-02-01' 
ORDER BY DateAddedToMarket DESC

如果要在子查询表(本例中为表2)中搜索DateAddedToMarket,则此查询将不起作用

在这里,主查询从表1中获取数据,其中ColumnX位于表2中。因此,date filter DateAddedToMarket不适用于此。它只是通过ColumnX获取表1中提供给它的所有内容

实际上,如果您试图在表2中进行搜索,那么此查询将无法实现这一点。您需要这样做:

SELECT * FROM Table1 WHERE ColumnX in (

SELECT DISTINCT ColumnX FROM Table2 WHERE DateAddedToMarket ... UNION

SELECT DISTINCT ColumnY FROM Table2 WHERE DateAddedToMarket ...) 

函数中的select子句效率极低,除非查询优化器将其设置为联接。改变你在。。。协会子句并连接表。然后在where子句中添加过滤器,并合并两个几乎相同的选择

SELECT Table1.* FROM Table1 
JOIN Table2 on Table1.ColumnX = Table2.ColumnX
where Table1.DateAddedToMarket >= '2018-01-01' 
AND    Table1.DateAddedToMarket < '2018-02-01' 
UNION
SELECT Table1.* FROM Table1 
JOIN Table2 on Table1.ColumnX = Table2.ColumnY
where    Table1.DateAddedToMarket >= '2018-01-01' 
AND    Table1.DateAddedToMarket < '2018-02-01' 
ORDER BY Table1.DateAddedToMarket DESC

我收到了正确的日期,但也收到了超出表2中我希望匹配的值的结果,但是你唯一的过滤器是日期。。。那么您指的是哪些值?@LearnByReading更新,显示了表2。它似乎给了我表2中没有的值。我想知道这是为什么?不应该,但我有一个打字错误。每个联接中的第一个和第二个应位于何处。其中两个。您还可以自己运行每个联合查询,并查看得到的结果。
SELECT * FROM Table1 WHERE ColumnX in (

SELECT DISTINCT ColumnX FROM Table2 WHERE DateAddedToMarket ... UNION

SELECT DISTINCT ColumnY FROM Table2 WHERE DateAddedToMarket ...) 
SELECT Table1.* FROM Table1 
JOIN Table2 on Table1.ColumnX = Table2.ColumnX
where Table1.DateAddedToMarket >= '2018-01-01' 
AND    Table1.DateAddedToMarket < '2018-02-01' 
UNION
SELECT Table1.* FROM Table1 
JOIN Table2 on Table1.ColumnX = Table2.ColumnY
where    Table1.DateAddedToMarket >= '2018-01-01' 
AND    Table1.DateAddedToMarket < '2018-02-01' 
ORDER BY Table1.DateAddedToMarket DESC