Sql 引用第二个表的新列-是否需要联接?
我有两个表(显示了前两个),需要从前两个表中提取第三个表-我需要进行联接,还是您可以在不联接的情况下引用表 所示的第三个表是所需的输出。谢谢你的帮助Sql 引用第二个表的新列-是否需要联接?,sql,Sql,我有两个表(显示了前两个),需要从前两个表中提取第三个表-我需要进行联接,还是您可以在不联接的情况下引用表 所示的第三个表是所需的输出。谢谢你的帮助 | ACC | CALL DATE | | | +-----+-----------+--+--+ | 1 1 | 2/1/18 | | | +-----+-----------+-- +-----+---------------+--+--+ | ACC | PURCHASE DATE | | | +-----+-------
| ACC | CALL DATE | | |
+-----+-----------+--+--+
| 1 1 | 2/1/18 | | |
+-----+-----------+--
+-----+---------------+--+--+
| ACC | PURCHASE DATE | | |
+-----+---------------+--+--+
| 1 1 | 1/1/18 | | |
+-----+---------------+--+--+
+-----+-----------+----------------------+--+
| ACC | CALL DATE | PRIOR MONTH PURCHASE | |
+-----+-----------+----------------------+--+
| 1 1 | 2/1/18 | YES | |
+-----+-----------+----------------------+--+
让我们检查选项 假设您要基于前两个表中的数据创建新的第三个表,那么对其中任何一个表的每次更新/插入/删除也应该传播到第三个表中 假设您有一个视图,它可以满足您的需要,那么就不需要维护第三个表,并且每次查询时都可以从前两个表中获取所需的数据
create view third_table as
select a.acc,a.call_date,case when dateadd(mm,-1,a.call_date)=b.purchase_date then 'Yes' else 'No end as prior_month_purchase
from first_table a
left join second_table b
on a.acc=b.acc
当然,您可以有一个引用多个表的查询,而无需联接
union all
就是这样一个操作符的例子
还有一个问题,你所说的“加入”是什么意思。如果您指的是显式连接,那么有一些方法可以解决这个问题,比如相关子查询。但是,它们正在数据库引擎中实现某种形式的“连接”
对于您的查询,您希望将exists
与相关子查询一起使用:
select t1.*,
(case when exists (select 1
from table2 t2
where t2.acc = t1.acc and
datediff(month, t2.purchase_date, t1.call_date) = 1
)
then 'Yes' else 'No'
end) as prior_month_purchase
from table1 t1;
这比join
更好,因为它不会乘法或删除行。结果集正好包含第一个表中的行以及附加列
语法假定为SQL Server(它是原始标记)。类似的逻辑也可以在其他数据库中表达,尽管众所周知,日期函数依赖于数据库。MySQL SQL Server。请指定您正在使用的RDBMS?这取决于您正在做什么。如果您需要来自多个表的数据,请连接。如果你不加入,就不要加入。嗨,欢迎加入SO。请编辑问题以显示您已尝试的内容。这样,我们将能够更好地理解您的问题,从而更好地帮助您。最好是提供一个新的解决方案。有关更多信息,请参阅并使用。