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